Какие-то хакеры набрели на мой сервак (Ubuntu 6.06 / Apache 2.0.55), и каким-то образом получили shell-доступ через apache.
Причём на том виртуальном хосте, через который они лезут, нет никаких PHP/Perl и прочих скриптов, значит они эксплуатируют какую-то уязвимость самого сервера.
Но в списке рассылки по безопасности Ubuntu текущих уязвимостей нет.
Так как же мне выяснить хотя бы что они делают, чтобы эксплуатировать дыру?
В логах только вывод в stdout тех shell-команд, которые им удаётся запустить.
Пару раз удавалось перехватить скриптики, которые они закачивают в /tmp. Качают при помощи curl/wget/fetch/lwp-download, я их всех поудалял или переименовал, но это временное решение.
Я хочу найти дыру в apache и как-то залатать ее, или написать багрепорт, но для этого нужно больше данных о тактике взлома.
Как дальше действовать?
РЕШЕНИЕ:
И всё-таки это была уязвимость в моём коде - банальный незащищённый include в PHP-скрипте.
Я долго рыл совсем не в ту сторону, а наставили на путь истинный меня результаты мониторинга трафика.
Исходя из открытых у меня портов, я давал каждый день такую команду:
1
2
|
sudo tcpdump -s 0 -w /var/log/tcpdump.cap host xxx.xxx.xxx.xxx and port not ftp and port not ssh and port not smtp and port not ftp-data and port not pop3
|
Когда рыбка в очередной раз клюнула, я нашёл-таки зловредный скрипт, и исправил его.
В процессе ценные советы давал, среди прочих,
albibek, и особо полезные выдержки из его постов я процитирую ниже под катом. Все остальные подробности смотрите в ветке. Всем участникам обсуждения спасибо!
Если есть место на диске, можно запускать tcpdump не в режиме мониторинга, а в режиме записи в файл. Если остановитесь на этой схеме, лучше даже поставьте wireshark, у него в комплекте есть текстовые утилиты, которые умеют не только собирать в файл, но и разбивать этот файл на части по размеру(советую делать не больше 0.5-1 гигабайта) и по количеству файлов, а старые логи ротировать.
Если хватит места на диске(вполне реально при небольшом количестве трафика), можно хранить дампы хотя бы за несколько дней, чтобы когда появятся полохие дяди, было что анализировать.
Всегда есть вероятность, что дяди найдут ваш tcpdump/wireshark и попортят или сотрут файлы. Поэтому и говорю, что лучше делать это на промежуточном узле.
Ещё если есть время и желание, можете покурить samhain. Замаскируйте его под мирный процесс, может удастся что-то обнаружить, когда начнётся активность.
tcpdump -i <интерфейс> -n -s0 -w <имя_файла_куда_писать> '<фильтр>'
-n - не ресолвить имена и порты
-s0 - (важно!)записывать пакеты целиком, а не первые X байт
Из комплекта wireshark утилита называется dumpcap
dumpcap -n -s 0 -w /tmp/testwire -b filesize:1000000 -b files:5 -f '<фильтр>'
Будет писать в кольцевой буфер из 5 файлов размером 1000000*1024 байт. Т.е. примерно 5 гигабайт в сумме.
Потом как соберёте можно дополнительно фильтровать при помощи editcap и объединять/делить файлы при помощи mergecap.