|
|
Автор |
Съобщение |
Support
Регистриран на: 17/04/2010 8:37 am
Support:
Bonus: 698
Мнения: 2664
|
18/01/2018 9:35 pm
|
|
|
Относно dakata__92 написа: |
скенера ме алармира, че се съдържа константа T_INLINE_HTML. |
Ако си пуснал short_open_tag, няма T_INLINE_HTML.
Като цяло идеята ми беше, че може да имаш код и после да е минат през някакъв обфускатор и да не ти работи "скенера". |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 239
Мнения: 3157
|
18/01/2018 10:50 pm
|
|
|
Fakeheal написа: | Относно dakata__92 написа: |
скенера ме алармира, че се съдържа константа T_INLINE_HTML. |
Ако си пуснал short_open_tag, няма T_INLINE_HTML.
Като цяло идеята ми беше, че може да имаш код и после да е минат през някакъв обфускатор и да не ти работи "скенера". |
Ясно. А някакви идеи за какво да следя и най-вече как да следя? Пострингово търсене или базисно на някоя функция? |
|
Върнете се в началото |
|
|
Support
Регистриран на: 17/04/2010 8:37 am
Support:
Bonus: 698
Мнения: 2664
|
18/01/2018 11:52 pm
|
|
|
Ох, аз не съм много компетентна в тая сфера. Но според мен съдържанието не трябва да те притеснява на самия файл, а сетъпа на сървъра и кода за самото качване на файлове (т.е. да не качват където си искат).
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 239
Мнения: 3157
|
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 символа. Просто ще ме предупреждава, че в даденият файл има непрекъснато съдържание от символи и като го проверя ръчно да реша сам дали е истинска заплаха. Все още го обмислям. |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 11/06/2012 8:07 pm
Support:
Bonus: 321
Мнения: 1514
|
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"); |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 11/06/2012 8:07 pm
Support:
Bonus: 321
Мнения: 1514
|
19/01/2018 12:06 am
|
|
|
А сега ми хрумна, мисля, най-простия начин да блокираш всякакво подобно поведение - изобщо да забраниш извикването на функции, чиито имена се държат в променливи. Нещо подобно: PHP code: $/*каквото и да е, с равен брой (){}[]*/( Като също внимаваш с ";", да не би да се окаже валиден код (тук пък ще трябва да провериш и дали има анонимна функция, в която може да има легално ";"): PHP code: ${ (function () { return 'ev'; })() // да не би скриптът да пропадне, ако ";" го обърка . (function () { return 'al'; })() }("bad command"); Но пък в случая ";" ще седи вътре в скобите, така че за него няма да има нужда да се притесняваш. Само гледай за четен брой скоби. |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 239
Мнения: 3157
|
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");
|
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 239
Мнения: 3157
|
19/01/2018 12:12 am
|
|
|
anonimen написа: | А сега ми хрумна, мисля, най-простия начин да блокираш всякакво подобно поведение - изобщо да забраниш извикването на функции, чиито имена се държат в променливи.
Нещо подобно:
PHP code: $/*каквото и да е, с равен брой (){}[]*/(
Като също внимаваш с ";", да не би да се окаже валиден код (тук пък ще трябва да провериш и дали има анонимна функция, в която може да има легално ";"):
PHP code: ${ (function () { return 'ev'; })() // да не би скриптът да пропадне, ако ";" го обърка . (function () { return 'al'; })() }("bad command");
Но пък в случая ";" ще седи вътре в скобите, така че за него няма да има нужда да се притесняваш. Само гледай за четен брой скоби. |
Хммм много интересно! Ще помисля над думите ти, струва ми се, че има хляб в идеята и ще разграничи доста нещата. |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 11/06/2012 8:07 pm
Support:
Bonus: 321
Мнения: 1514
|
19/01/2018 12:15 am
|
|
|
.... още една, може би малко безумна идея, но защо не? Да си направиш карта на цялата структура от директории, която да "заключиш" в immutable файл. Може също да добавиш някакъв хеш, за да си сигурен че файлът не е променян (immutable може да се премахне от root-а). A после към проверките ще правиш и сравнение на картата с реалността. Така ще си сигурен, че никой не е пипал нищо. (че не е добавял/триел файлове/директории. Можеш да си направиш и хеш на файловете ако искаш и съдържанието им да се проверява) |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 239
Мнения: 3157
|
19/01/2018 12:20 am
|
|
|
anonimen написа: | .... още една, може би малко безумна идея, но защо не?
Да си направиш карта на цялата структура от директории, която да "заключиш" в immutable файл.
Може също да добавиш някакъв хеш, за да си сигурен че файлът не е променян (immutable може да се премахне от root-а).
A после към проверките ще правиш и сравнение на картата с реалността. Така ще си сигурен, че никой не е пипал нищо. (че не е добавял/триел файлове/директории. Можеш да си направиш и хеш на файловете ако искаш и съдържанието им да се проверява) |
Това го размишлявах доста, но да кажем, че вероятно повече ще ползвам кода в чужди проекти за бърз анализ на непозната за мен система. Искам да ме ориентира къде може да има възможен проблем по темата пък вече аз ще следя за другите неща. Така, че при мен отпада като варянт просто заради целите за, които ще ползвам кода. Като цяло това си е фрактално сравняване на директориите извеждане на разликите спрямо запаметеното във файла. |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 239
Мнения: 3157
|
20/01/2018 3:57 pm
|
|
|
Колеги, ако се предположи, че съм си драснал що годе добър начален скенер за PHP заплахи, за какво да се оглеждам в JS файловете? Как да процедирам с тях и по какви маркери според Вас е най-добре да се следи за външна намеса?
|
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 114
Мнения: 779
|
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 и т.н., които могат да се настройват по различни начини и някои дават по-голяма свобода за изплнение на доста различни видове скриптове, които рязко ще увеличат работата на скенера ти. |
|
Върнете се в началото |
|
|
|
|
Не Можете да пускате нови теми Не Можете да отговаряте на темите Не Можете да променяте съобщенията си Не Можете да изтривате съобщенията си Не Можете да гласувате в анкети
|
|
|
|