Обнаружение эксплойтов в веб-приложениях и как действовать

Какие существуют способы обнаружения эксплойтов в веб-приложениях PHP / MySQL (проверка определенных символов или фрагментов кода в массивах GET, POST, COOKIE / использование библиотеки с базой данных, в которой есть все шаблоны для распространенных эксплойтов, если таковые существуют? ) и что мне делать, если он обнаружен?

Например, если кто-то попытался найти SQL-инъекцию в моем веб-приложении PHP / MySQL с помощью метода запроса GET, должен ли я сохранить действие, выполненное пользователем, в базе данных, отправить приложение по электронной почте, запретить IP-адрес пользователя и отобразить ему / ей сообщение "Извините, но мы обнаружили вредоносное действие в вашей учетной записи, которое будет рассмотрено. Ваша учетная запись была отключена, и некоторые функции могут быть отключены с вашего IP-адреса. Если это ошибка, пожалуйста, e - напишите нам со всеми подробностями."

Спасибо.


person TheMagician    schedule 08.02.2010    source источник


Ответы (5)


На ум приходят три вещи:

  1. защитное кодирование, дезинфекция всего ввода, подготовка операторов sql и использование Suhosin
  2. повысить безопасность своего сайта, взломав его с помощью сканера уязвимостей
  3. регистрировать попытки взлома с помощью системы обнаружения вторжений

Если вам кажется, что полноценная IDS - это слишком, попробуйте PHP IDS, поскольку она делает в значительной степени то, о чем вы просите. из коробки. Обратите внимание, что обнаружение вторжений на уровне PHP может быть уже слишком поздно для предотвращения атаки.

В случае успешного вторжения, я думаю, лучше всего отключить сервер и посмотреть, какой ущерб был нанесен. Возможно, вам придется подумать о том, чтобы нанять кого-нибудь для проведения судебно-медицинской экспертизы машины на случай, если вам понадобится собрать юридически применимые доказательства.

Если вы чувствуете, что должны отреагировать на неудачные попытки вторжения и получили IP-адрес злоумышленника, найдите интернет-провайдера и сообщите ему как можно больше подробностей о попытке вторжения. У большинства интернет-провайдеров есть контакты для таких случаев.

person Gordon    schedule 08.02.2010
comment
кто-нибудь знает, что случилось с php-id? их сайт не работает месяц или больше? - person Steve; 15.02.2011
comment
они переместили его на phpids.org. Я бы хотел, чтобы они перенаправляли трафик. - person Eric Cope; 17.03.2011

Ваш вопрос двоякий, и я отвечу на вторую часть.

Записывать все, но не запрещать и не отображать никаких сообщений. Будет неловко в случае ложного срабатывания. Как правило, старайтесь создавать приложение, способное без проблем обрабатывать любой тип пользовательского ввода.

person cherouvim    schedule 08.02.2010

просто используйте strip_tags() для всех переменных $_REQUEST и $_COOKIE, чтобы позаботиться о коде, отображаемом в этих переменных, так как для SQL вам, возможно, придется написать регулярное выражение, подобное запросу, или что-то в этом роде, но это не должно быть проблемой, поскольку вы всегда должен mysql_real_escape_string($str) все переменные в ваших запросах. хотя попробуйте что-нибудь вроде этого.

function look_for_code_and_mail_admin($str) {
    $allowed_tags = "<a>,<br>,<p>";
    if($str != strip_tags($str, $allowed_tags)) {
        $send_email_to = "[email protected]";
        $subject = "some subject";
        $body = "email body";
        mail($send_email_to,$subject,$body);   
    }
    return($str);
}
person seventeen    schedule 08.02.2010
comment
Я знаю, как защитить свое приложение от эксплойтов, я просто хочу поймать любых пользователей, которые попытаются намеренно сломать его и причинить вред. Учитывая, сколько существует различных видов эксплойтов, я не думаю, что одно регулярное выражение справится с этой задачей. - person TheMagician; 09.02.2010
comment
Использование экранирования для защиты от SQL-инъекций на самом деле неправильный путь; параметризованные запросы (т.е. функции / классы mysqli намного безопаснее - person Michael Borgwardt; 09.02.2010
comment
вы правы, их обоих сложно назвать, особенно sql-инъекцию. Даже функция, которую я только что предложил, окажется положительной, если кто-то поставит тег ‹ b› и не будет знать, что это запрещено. - person seventeen; 09.02.2010

Хм, я не могу вспомнить, когда в последний раз я видел сайт, который пытается регистрировать атаки с помощью SQL-инъекций, которые я не смог взломать.

Вам не нужно беспокоиться о том, что кто-то атакует сайт, поскольку это в лучшем случае субъективно, независимо от того, является ли что-то атакой или нет. Что, если сайт base64 кодирует некоторые значения и декодирует их перед тем, как использовать? Ваша IDS не поймает это. Что, если пользователь захочет опубликовать фрагмент кода, его обнаружат как эксплойт, поскольку он содержит SQL? Это такая трата времени ... Если вам действительно нужно знать, атакует ли кто-то вас, просто установите несколько IDS на отдельную машину с доступом только для чтения к входящему трафику ... Я говорю отдельная машина, потому что многие IDS сами по себе уязвимы и только усугубят ситуацию.

Используйте стандартные методологии безопасного программирования, используйте параметризованные SQL-запросы или ORM.

person L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o&#x    schedule 22.04.2010

Мне кажется, слишком много работы с электронной почтой и всем остальным. Кроме того, мне нравится бегать по сайтам, которыми я часто пользуюсь, и пытаться найти инъекционные точки, чтобы я мог предупредить об этом администратора. Вы бы забанили меня по IP за это?

Я предлагаю самостоятельно отыскать детали, которые можно использовать, и при необходимости продезинфицировать их. У Acunetix есть очень хорошая программа для этого. Если вам не хочется выкладывать гигантскую цену за Acunetix, есть несколько очень хороших надстроек Firefox под названием XSS Me и SQL Inject me, которые вы, возможно, захотите изучить.

person Rob    schedule 08.02.2010
comment
Как я могу отличить вас от пользователя, который пытается взломать приложение и украсть информацию о каждом пользователе? Если я замечу, что кто-то запускает эксплойты в моем приложении, я хочу остановить этого пользователя от продолжения, если он в конечном итоге добьется успеха. - person TheMagician; 09.02.2010
comment
Ну в том-то и дело, что меня и злонамеренного пользователя не отличишь. Вы также не сможете отличить злонамеренного пользователя от обычного пользователя, который просто случайно набрал не то. Вам нужно настроить что-то, чтобы, если они сделали это более одного или двух, или даже пяти раз, ТОГДА это активировало анти-эксплойт. Так что я думаю, если вы действительно беспокоитесь об этом, вам нужно установить это на место, но я все же предлагаю просто выследить эксплойты и очистить их самостоятельно. - person Rob; 09.02.2010
comment
-1 Если вы используете безопасные методологии программирования, вам не нужна ложная безопасность, которой является Auntex. - person L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o&#x; 22.04.2010