Всем привет, дорогие друзья. В этой публикации речь пойдет об одном очень полезном инструменте для определения файлов с отличающимся «стилем программирования», относительно «общего стиля» сканируемых файлов. Это может пригодится для определения шеллов и других зараженных скриптов. Скрипт называется NeoPI, однако до недавнего времени он был только на Python, теперь есть и на PHP.
Что такое NeoPI
Целевое назначение NeoPI является помощь в обнаружении скрытого кода в различных проектах. NeoPI рекурсивно просматривает файловую систему от базовой директории и ранжирует рейтинги файлов, которые генерируется в семи различных тестах. Он также предоставляет «общую» оценку, полученную из рейтинга файлов во всех отдельных тестах.
Репозиторий
Требования
- PHP 5
- Пользователь, запускающий скрипт, должен иметь доступ на чтение всех файлов, которые должны быть проверены.
Как использовать
Скрипт можно запускать как из консоли, так и через браузер. Для запуска через браузер просто скопируйте скрипт в нужную директорию и запустите, скачать можно по ссылке, в репозитории. Для запуска через консоль сначала скопируйте репозиторий на сервер командой:
1 |
git clone ssh://git@github.com:halfhope/NeoPI.git |
Теперь запустите скрипт с флагом -h или --help чтобы увидеть доступные опции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@ip-192-168-78-131 ~]# php /web/search.ru/www/neopi_v2.php -h NeoPI usage: -h, --help <help info> [default=__DIR__] -p, --path <start directory> [default=.] -e, --extensions <file extensions to scan delimiter ;> [default=php] -a, --all <Run all (useful) tests [Entropy, Longest Word, IC, Signature]> [default=false] --ic <Run IC test> [default=true] --entropy <Run entropy Test> [default=true] --longestword <Run longest word test> [default=true] --signature <Run signature test> [default=true] --supersignature <Run SUPER-signature test> [default=true] --eval <Run signiture test for the eval> [default=true] --zlib <Run compression Test> [default=true] -l, --report_limit <Limit files in report lists> [default=10] -c, --csv <Save Result in CSV file> [default=false] |
Теперь о каждой по порядку:
1 |
-h, --help |
Показывает это сообщение
1 |
-p, --path |
Путь к папке для рекурсивного сканирования. По умолчанию — папка, в которой находится файл.
1 |
-e, --extensions |
Расширения файлов, которые подлежат сканированию, разделенные точкой с запятой «;». По умолчанию — php, asp, aspx, sh, bash, zsh, csh, tsch, pl, py, txt, cgi, cfm.
1 |
-a, --all |
Запуск всех тестов.
1 |
--ic |
Добавить флаг для выполнения теста индекса совпадений (Index of Coincidence)
1 |
--entropy |
Добавить флаг для выполнения теста энтропии файла
1 |
--longestword |
Добавить флаг на выполнение теста на самое большое слово
1 |
--signature |
1 |
--supersignature |
Добавить флаг на выполнение проверки файлов на известные сигнатуры
1 |
--eval |
Добавить флаг на выполнение проверки файлов на наличие eval.
1 |
--zlib |
Добавить флаг на выполнение проверки файлов на степень сжатия.
1 |
-l, --report_limit |
Лимит файлов в отчете.
1 |
-c, --csv |
Сохранить результат в CSV файл. Результат выполнения скрипта будет записан в новый файл и сохранен в той же директории, что и скрипт.
По умолчанию, если запускать без аргументов, NeoPI проводит все тесты. Результаты сканирования выглядят следующим образом:
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
[[ Scan time 14.31 ]] [[ Files Checked 1188 ]] [[ Top 10 lowest IC files. Method time: 3.62 ]] 0.266 /web/search.ru/www/found/12.php 0.168 /web/search.ru/www/catalog/model/catalog/gallery.php 0.16 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/utils/dict_stuff/dict/writer/xml.php 0.144 /web/search.ru/www/admin/language/english/common/header.php 0.14 /web/search.ru/www/admin/language/english/english.php 0.138 /web/search.ru/www/admin/language/english/shipping/fedex.php 0.134 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/utils/dict_stuff/dict/source/xml.php 0.131 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/src/fsa/access/fsa_sparse_file.php 0.127 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/utils/autogen/fsa/tpl/fsa.tpl.php 0.126 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/src/fsa/access/fsa_sparse_mem.php [[ Top 10 entropic files for a given search. Method time: 2.23 ]] 6.118 /web/search.ru/www/mod/upload_suggestion/catalog/model/catalog/search_suggestion.php 6.073 /web/search.ru/www/mod/upload_mr/catalog/model/catalog/search_mr.php 5.873 /web/search.ru/www/found/1.php 5.769 /web/search.ru/www/12/firewall.php 5.753 /web/search.ru/www/firewall.php 5.737 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/src/langs_stuff/ru_ru.php 5.705 /web/search.ru/www/install/controller/step_3.php 5.689 /web/search.ru/www/system/library/ocstore.php 5.656 /web/search.ru/www/install/controller/upgrade.php 5.655 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/utils/dict_stuff/dict/convert/names/rus.php [[ Top 10 longest word files. Method time: 1.63 ]] 424 /web/search.ru/www/mod/upload_suggestion/mod/model/catalog/search_suggestion.php 228 /web/search.ru/www/install/model/upgrade.php 188 /web/search.ru/www/system/library/mcj/lib/javascriptpacker.php 174 /web/search.ru/www/system/library/mcj/lib/yuicsscompressorphpport.php 160 /web/search.ru/www/admin/language/russian/payment/klarna_invoice.php 160 /web/search.ru/www/admin/language/english/payment/klarna_pp.php 149 /web/search.ru/www/12/firewall.php 143 /web/search.ru/www/mod/upload_mr/catalog/model/tool/morphy.php 117 /web/search.ru/www/mod/upload_suggestion/catalog/model/catalog/attributes_to_text.php 115 /web/search.ru/www/wallpaper/index.php [[ Top 10 signature Nasty match counts. Method time: 4.3 ]] 2 /web/search.ru/www/catalog/controller/error/not_found.php 2 /web/search.ru/www/catalog/controller/common/seo_url.php 2 /web/search.ru/www/catalog/controller/common/seo_pro.php 2 /web/search.ru/www/catalog/controller/feed/gallery.php 2 /web/search.ru/www/catalog/controller/feed/google_base.php 2 /web/search.ru/www/catalog/controller/gallery/photos.php 2 /web/search.ru/www/catalog/controller/gallery/gallery.php 2 /web/search.ru/www/catalog/controller/feed/google_sitemap.php 2 /web/search.ru/www/catalog/controller/common/seo_gallery.php 2 /web/search.ru/www/catalog/controller/common/maintenance.php [[ Top 10 SUPER-signature match counts (These are usually bad!). Method time: 1.62 ]] 2 /web/search.ru/www/catalog/controller/error/not_found.php 2 /web/search.ru/www/catalog/controller/common/seo_url.php 2 /web/search.ru/www/catalog/controller/common/seo_pro.php 2 /web/search.ru/www/catalog/controller/feed/gallery.php 2 /web/search.ru/www/catalog/controller/feed/google_base.php 2 /web/search.ru/www/catalog/controller/gallery/photos.php 2 /web/search.ru/www/catalog/controller/gallery/gallery.php 2 /web/search.ru/www/catalog/controller/feed/google_sitemap.php 2 /web/search.ru/www/catalog/controller/common/seo_gallery.php 2 /web/search.ru/www/catalog/controller/common/maintenance.php [[ Top 10 eval match counts. Method time: 0.14 ]] 3 /web/search.ru/www/catalog/controller/error/not_found.php 3 /web/search.ru/www/catalog/controller/common/seo_url.php 3 /web/search.ru/www/catalog/controller/common/seo_pro.php 3 /web/search.ru/www/catalog/controller/feed/gallery.php 3 /web/search.ru/www/catalog/controller/feed/google_base.php 3 /web/search.ru/www/catalog/controller/gallery/photos.php 3 /web/search.ru/www/catalog/controller/gallery/gallery.php 3 /web/search.ru/www/catalog/controller/feed/google_sitemap.php 3 /web/search.ru/www/catalog/controller/common/seo_gallery.php 3 /web/search.ru/www/catalog/controller/common/maintenance.php [[ Top 10 compression match counts. Method time: 0.52 ]] 1.421 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/examples/test.php 1.32 /web/search.ru/www/mod/upload_mr/system/library/phpmorphy/utils/autogen/fsa/tpl/sparse/extra_props.tpl.php 1.286 /web/search.ru/www/found/i.php 1.22 /web/search.ru/www/catalog/language/russian/total/total.php 1.17 /web/search.ru/www/catalog/language/english/module/welcome.php 1.156 /web/search.ru/www/catalog/language/russian/total/sub_total.php 1.14 /web/search.ru/www/catalog/language/russian/module/currency.php 1.138 /web/search.ru/www/catalog/language/russian/total/coupon.php 1.132 /web/search.ru/www/catalog/language/russian/module/language.php 1.125 /web/search.ru/www/system/smsgate/testsms.php [[ Top 10 cumulative ranked files ]] 701.769 /web/search.ru/www/12/firewall.php 424 /web/search.ru/www/mod/upload_suggestion/mod/model/catalog/search_suggestion.php 228 /web/search.ru/www/install/model/upgrade.php 188 /web/search.ru/www/system/library/mcj/lib/javascriptpacker.php 174 /web/search.ru/www/system/library/mcj/lib/yuicsscompressorphpport.php 160 /web/search.ru/www/admin/language/english/payment/klarna_pp.php 160 /web/search.ru/www/admin/language/russian/payment/klarna_invoice.php 143 /web/search.ru/www/mod/upload_mr/catalog/model/tool/morphy.php 117 /web/search.ru/www/mod/upload_suggestion/catalog/model/catalog/attributes_to_text.php 115 /web/search.ru/www/wallpaper/index.php |