Нужна помощь для обнаружения вирусной активности вредоносного ПО с помощью awk - PullRequest
0 голосов
/ 06 сентября 2011

У меня проблемы с сервером, так как иногда вредоносные программы добавляют свой код в конце или в начало файлов.Я устранил лазейки безопасности в меру своих знаний.Мой хостинг-провайдер сообщил, что безопасность сейчас адекватна, но я стал параноиком из-за активности вирусов и вредоносных программ на моем сайте.У меня есть план, но я не очень хорошо разбираюсь в Linux-редакторах, таких как sed, awk или gawk, поэтому нужна помощь с вашей стороны.Я могу сделать это, используя свои знания PHP, но это будет очень ресурсоемким.

Поскольку вредоносные программы / вирусы добавляют код в начало или конец файла (чтобы на веб-сайте не отображалась какая-либо ошибка), пожалуйста, дайте мне знать, как написать команду, которая рекурсивно просматривает все.Файлы php (я буду использовать справку для внесения изменений в другие типы файлов) в родительском и всех подкаталогах и добавьте определенный тег в начало и конец файла, скажем, XXXXXX_START и YYYYYY_END.

Затем мне нужен скрипт, который будет читать все файлы .php и проверять, является ли первая строка кода XXXXX_START, а последняя строка - YYYYYYY_END, и создавать отчет, если какой-либо файл будет отличаться.

Я настрою cron для проверки всех файлов и отправлю мне отчет по электронной почте, если будет обнаружено какое-либо несоответствие.

Я знаю, что это не на 100% надежно, поскольку вирус может добавлять данные после закомментированных строк, но это лучший вариант, который я мог придумать.


Я пробовал следующие команды для добавления данных в начале -

sed -i -r  '1i add here' *.txt

, но это не рекурсивно и добавляет строку только в файлы родительского каталога.

Тогда я обнаружил, что BEGIN и END - это специальные паттерны.Они не используются для сопоставления входных записей.Скорее, они используются для предоставления информации о запуске или очистке вашего сценария awk.Правило BEGIN выполняется один раз перед прочтением первой входной записи.Правило END выполняется один раз после прочтения всего ввода.Например:

awk 'BEGIN { print "Analysis of `foo'" }
     /foo/ { ++foobar }
     END   { print "`foo' appears " foobar " times." }' BBS-list

Но, к сожалению, я не смог ничего расшифровать.

Любая помощь по вышеупомянутым деталям высоко ценится.Любые другие предложения приветствуются.

С уважением,

Нитин

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

Использование контроля версий и / или резервного копирования;в случае подозрительной активности запустите работающий сайт и переустановите его из резервных копий или из источника управления версиями.

1 голос
/ 06 сентября 2011

Для изменения файлов можно использовать следующее (также создаются файлы резервных копий с именем .bak):

find . -name "*.php" | xargs sed -i.bak '1iSTART_XXXX
$aEND_YYYY'

Для проверки файлов можно использовать следующий сценарий оболочки:

for f in `find . -name "*.php" -print`
do
    START_LINE=`head -1 $f`
    END_LINE=`tail -1 $f`

    if [[ $START_LINE != "START_XXXX" ]]
    then
        echo "$f: Mismatched header!"
    fi

    if [[ $END_LINE != "END_YYYY" ]]
    then
        echo "$f: Mismatched footer!"
    fi
done
0 голосов
/ 06 сентября 2011
$ find . -type f | grep "txt$" | xargs sed -i -r  '1i add here'

Применит эту команду ко всем файлам в или в текущем каталоге. Возможно, вы могли бы сложить логику grep в find, но мне нравятся простые заклинания.

...