- Скенер за заплахи
123
WT форуми -> PHP MySQL ASP.NET -> Скенер за заплахи
Създайте нова тема Напишете отговор 
Автор Съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 348
Bonus: 694
Мнения: 2628
Мнение 18/01/2018 9:35 pm      Отговорете с цитат


Относно
dakata__92 написа:

Fakeheal написа:
Btw:
(...)


скенера ме алармира, че се съдържа константа T_INLINE_HTML.


Ако си пуснал short_open_tag, няма T_INLINE_HTML.

Като цяло идеята ми беше, че може да имаш код и после да е минат през някакъв обфускатор и да не ти работи "скенера".
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 18/01/2018 10:50 pm      Отговорете с цитат


Fakeheal написа:
Относно
dakata__92 написа:

Fakeheal написа:
Btw:
(...)


скенера ме алармира, че се съдържа константа T_INLINE_HTML.


Ако си пуснал short_open_tag, няма T_INLINE_HTML.

Като цяло идеята ми беше, че може да имаш код и после да е минат през някакъв обфускатор и да не ти работи "скенера".

Ясно. А някакви идеи за какво да следя и най-вече как да следя? Пострингово търсене или базисно на някоя функция?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 348
Bonus: 694
Мнения: 2628
Мнение 18/01/2018 11:52 pm      Отговорете с цитат


Ох, аз не съм много компетентна в тая сфера. Но според мен съдържанието не трябва да те притеснява на самия файл, а сетъпа на сървъра и кода за самото качване на файлове (т.е. да не качват където си искат).
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 18/01/2018 11:52 pm      Отговорете с цитат


За момента проверявам и за следните функции:
PHP code:

"system" ,
"shell_exec",
"exec",
"eval",
"passthru",
"base64_encode",
"base64_decode",
"php_uname",
"phpinfo",
"fopen",
"readfile",
"chmod",
"extract"

Други, за които да внимавам? Проверявам, чрез stripos защото е по-бърза от регулярните изрази.
PHP code:
if (stripos($fileContents, $function."(") !== false)

Чудя се дали да структурирам и търсене на хеширано съдържание, но все още се чудя как да го засичам. Върти ми се в мозъчето да следя за непрекъснат низ с примерно по-голяма дължина от 100 символа. Просто ще ме предупреждава, че в даденият файл има непрекъснато съдържание от символи и като го проверя ръчно да реша сам дали е истинска заплаха. Все още го обмислям.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 151
Bonus: 301
Мнения: 1402
Мнение 18/01/2018 11:58 pm      Отговорете с цитат


Fakeheal написа:
Като цяло идеята ми беше, че може да имаш код и после да е минат през някакъв обфускатор и да не ти работи "скенера".


Само че обфускаторът няма да може да ползва T_DOLLAR_OPEN_CURLY_BRACES - ${dynamic_var_name}.

Което май е единствения начин да 'скриеш' отделни части от стринг в отделни 'невидими' (трудно-парсвуеми, parseable) променливи, така че да не можеш (достатъчно лесно) да хванеш, че присъства злонамерена команда.

В противен случай предполагам, че няма да е кой-знае колко трудно да сглобиш ръчно стрингови литерали от различни променливи, които обфускаторът е разделил на парчета и ги залепва.

PHP code:
$first = "ev";
$last = "al";
$bad_word = $first.$last; // това bad_word да речем, че можеш ръчно да проследиш какво ще се запише в него
$bad_word("bad shell script");// ... и ще разбереш какво е това <---


И:

PHP code:
$start = "ev";
$end = "al";
$first_var_name = 'start';
$second_var_name = 'end';
$bad_word = ${$first_var_name}.${second_var_name}; // това става вече значително по-сложно
// А сигурно може дори и така:
${
${$first_var_name}
. ${second_var_name}
}("bad shell script");
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 151
Bonus: 301
Мнения: 1402
Мнение 19/01/2018 12:06 am      Отговорете с цитат


А сега ми хрумна, мисля, най-простия начин да блокираш всякакво подобно поведение - изобщо да забраниш извикването на функции, чиито имена се държат в променливи.

Нещо подобно:

PHP code:
$/*каквото и да е, с равен брой (){}[]*/(


Като също внимаваш с ";", да не би да се окаже валиден код (тук пък ще трябва да провериш и дали има анонимна функция, в която може да има легално ";"):

PHP code:
${
(function () { return 'ev'; })() // да не би скриптът да пропадне, ако ";" го обърка
. (function () { return 'al'; })()
}("bad command");


Но пък в случая ";" ще седи вътре в скобите, така че за него няма да има нужда да се притесняваш. Само гледай за четен брой скоби.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 19/01/2018 12:10 am      Отговорете с цитат


Токените засичат с T_INLINE_HTML. Това ще е с доста както се казва фалшиви показания, но пак си е някаква доза предизвестие.
Цитат:
PHP code:
<?php 
$start = "ev";
$end = "al";
$first_var_name = 'start';
$second_var_name = 'end';
$bad_word = ${$first_var_name}.${second_var_name}; // това става вече значително по-сложно
// А сигурно може дори и така:
${
${$first_var_name}
. ${second_var_name}
}("bad shell script");
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 19/01/2018 12:12 am      Отговорете с цитат


anonimen написа:
А сега ми хрумна, мисля, най-простия начин да блокираш всякакво подобно поведение - изобщо да забраниш извикването на функции, чиито имена се държат в променливи.

Нещо подобно:

PHP code:
$/*каквото и да е, с равен брой (){}[]*/(


Като също внимаваш с ";", да не би да се окаже валиден код (тук пък ще трябва да провериш и дали има анонимна функция, в която може да има легално ";"):

PHP code:
${
(function () { return 'ev'; })() // да не би скриптът да пропадне, ако ";" го обърка
. (function () { return 'al'; })()
}("bad command");


Но пък в случая ";" ще седи вътре в скобите, така че за него няма да има нужда да се притесняваш. Само гледай за четен брой скоби.


Хммм много интересно! Ще помисля над думите ти, струва ми се, че има хляб в идеята и ще разграничи доста нещата.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 151
Bonus: 301
Мнения: 1402
Мнение 19/01/2018 12:15 am      Отговорете с цитат


.... още една, може би малко безумна идея, но защо не?

Да си направиш карта на цялата структура от директории, която да "заключиш" в immutable файл.

Може също да добавиш някакъв хеш, за да си сигурен че файлът не е променян (immutable може да се премахне от root-а).

A после към проверките ще правиш и сравнение на картата с реалността. Така ще си сигурен, че никой не е пипал нищо. (че не е добавял/триел файлове/директории. Можеш да си направиш и хеш на файловете ако искаш и съдържанието им да се проверява)
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 19/01/2018 12:20 am      Отговорете с цитат


anonimen написа:
.... още една, може би малко безумна идея, но защо не?

Да си направиш карта на цялата структура от директории, която да "заключиш" в immutable файл.

Може също да добавиш някакъв хеш, за да си сигурен че файлът не е променян (immutable може да се премахне от root-а).

A после към проверките ще правиш и сравнение на картата с реалността. Така ще си сигурен, че никой не е пипал нищо. (че не е добавял/триел файлове/директории. Можеш да си направиш и хеш на файловете ако искаш и съдържанието им да се проверява)

Това го размишлявах доста, но да кажем, че вероятно повече ще ползвам кода в чужди проекти за бърз анализ на непозната за мен система. Искам да ме ориентира къде може да има възможен проблем по темата пък вече аз ще следя за другите неща. Така, че при мен отпада като варянт просто заради целите за, които ще ползвам кода. Като цяло това си е фрактално сравняване на директориите извеждане на разликите спрямо запаметеното във файла.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 20/01/2018 3:57 pm      Отговорете с цитат


Колеги, ако се предположи, че съм си драснал що годе добър начален скенер за PHP заплахи, за какво да се оглеждам в JS файловете? Как да процедирам с тях и по какви маркери според Вас е най-добре да се следи за външна намеса?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 22/01/2018 12:13 am     Re: Скенер за заплахи Отговорете с цитат


dakata__92 написа:
Здравейте колеги! Реших да си създам скенер за възможни заплахи качени в сайта. В момента следя по разширението на файла и ако файла е PHP, то да се проверява за следните tokens:
Цитат:

T_BAD_CHARACTER,
T_START_HEREDOC,
T_END_HEREDOC,
T_CURLY_OPEN,
T_DECLARE,
T_EVAL,
T_DOLLAR_OPEN_CURLY_BRACES,
T_ELLIPSIS,
T_GOTO,
T_HALT_COMPILER,
T_INLINE_HTML,
T_STRING_VARNAME,
T_YIELD

Какво мислите по темата?


А защо ще се позволява качването на PHP файл? И защо, ако се качи файл трябва да е изпълним?
Я обясни отново идеята ти на този скенер, че сред всичките коментари, идеята започна да става объркваща.
Кой ще качва файловете, къде ще ги качва, защо ще ги качва? И в момента обръщаш внимание само на PHP. Ами, ако се качи Python скрипт? Той също може да бъде изпълнен. Там за какво ще следиш?

Разясни малко по-подробно идеята на скенера с примерни ситуации, в които искаш да го ползваш. Също и къде да го ползваш, защото от там започваме пък да разделяме на shared hosting, vps, cloud и т.н., които могат да се настройват по различни начини и някои дават по-голяма свобода за изплнение на доста различни видове скриптове, които рязко ще увеличат работата на скенера ти.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
123
Страница 2 от 3


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети