О каких распространенных веб-эксплойтах я должен знать?[закрыто]

StackOverflow https://stackoverflow.com/questions/23102

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

OWASP ( ОВАСП ) хранит список Топ - 10 веб-атаки, за которыми мы должны следить, в дополнение к множеству другой полезной информации по безопасности для веб-разработки.

Другие советы

Я публикую Сокращенный список OWASP Top 2007 здесь для того, чтобы людям не приходилось переходить по другой ссылке и на случай, если источник исчезнет.

Межсайтовый скриптинг (XSS)

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

Дефекты впрыска

  • Ошибки внедрения, особенно SQL-инъекции, часто встречаются в веб-приложениях.Внедрение происходит, когда предоставленные пользователем данные отправляются интерпретатору как часть команды или запроса.Враждебные данные злоумышленника заставляют интерпретатор выполнять непреднамеренные команды или изменять данные.

Выполнение вредоносного файла

  • Код, уязвимый для удаленного включения файлов (RFI), позволяет злоумышленникам включать враждебный код и данные, что приводит к разрушительным атакам, таким как полная компрометация сервера.Атаки на выполнение вредоносных файлов затрагивают PHP, XML и любую платформу, которая принимает имена файлов от пользователей.

Небезопасная Прямая Ссылка На объект

  • Прямая ссылка на объект возникает, когда разработчик предоставляет ссылку на внутренний объект реализации, такой как файл, каталог, запись базы данных или ключ, в качестве URL-адреса или параметра формы.Злоумышленники могут манипулировать этими ссылками для доступа к другим объектам без авторизации.

Подделка межсайтовых запросов (CSRF)

  • CSRF-атака заставляет браузер вошедшей в систему жертвы отправлять запрос с предварительной аутентификацией уязвимому веб-приложению, которое затем вынуждает браузер жертвы выполнить враждебное действие в интересах злоумышленника.CSRF может быть таким же мощным, как и веб-приложение, которое он атакует.

Утечка информации и неправильная обработка ошибок

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

Нарушенная аутентификация и управление сеансами

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

Небезопасное Криптографическое хранилище

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

Небезопасные Коммуникации

  • Приложениям часто не удается зашифровать сетевой трафик, когда это необходимо для защиты конфиденциальных сообщений.

Неспособность ограничить доступ к URL-адресу

  • Часто приложение защищает конфиденциальные функции только путем предотвращения отображения ссылок или URL-адресов неавторизованным пользователям.Злоумышленники могут использовать эту уязвимость для доступа к этим URL-адресам напрямую и выполнять неавторизованные операции.

Проект по обеспечению безопасности Открытых веб-приложений

-Адам

Все будут говорить "SQL-инъекция", потому что это самая пугающе звучащая уязвимость, от которой легче всего прийти в себя.Межсайтовый скриптинг (XSS) выйдет на второе место, потому что его также легко понять."Плохая проверка входных данных" - это не уязвимость, а скорее оценка наилучшей практики обеспечения безопасности.

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

  • Динамический SQL (например, конструкторы запросов пользовательского интерфейса).К настоящему времени вы, вероятно, знаете, что единственный надежный способ использования SQL в веб-приложении - это использование параметризованных запросов, где вы явно привязываете каждый параметр в запросе к переменной.Места, где я вижу, что веб-приложения чаще всего нарушают это правило, - это когда вредоносный ввод является не очевидным параметром (например, именем), а скорее атрибутом запроса.Очевидным примером являются "Интеллектуальные плейлисты", подобные iTunes, которые вы видите на поисковых сайтах, где такие вещи, как операторы where-clause, передаются непосредственно в серверную часть.Еще один важный момент, который стоит перевернуть, - это сортировка столбцов таблицы, где вы увидите такие вещи, как DESC, отображаемые в параметрах HTTP.

  • Отправить файл.Загрузка файлов сбивает людей с толку, потому что пути к файлам подозрительно похожи на пути к URL-адресам, а также потому, что веб-серверы упрощают реализацию части "загрузки", просто направляя URL-адреса в каталоги файловой системы.7 из 10 тестируемых нами обработчиков загрузки позволяют злоумышленникам получать доступ к произвольным файлам на сервере, поскольку разработчики приложения предполагали, что к вызову файловой системы "open()" применяются те же разрешения, что и к запросам.

  • Хранилище паролей.Если ваше приложение сможет отправить мне по почте мой исходный пароль, когда я его потеряю, вы потерпите неудачу.Существует единственный безопасный способ хранения паролей - bcrypt;если вы используете PHP, вам, вероятно, нужен PHPpass.

  • Генерация случайных чисел.Классическая атака на веб-приложения:сбросьте пароль другого пользователя, и, поскольку приложение использует системную функцию "rand ()", которая не является криптозащитной, пароль предсказуем.Это также применимо везде, где вы занимаетесь криптографией.Чего, кстати, тебе не следует делать:если вы где-либо полагаетесь на криптографию, вы, скорее всего, уязвимы.

  • Динамический вывод.Люди слишком сильно верят в проверку входных данных.Ваши шансы очистить вводимые пользователем данные от всех возможных метасимволов, особенно в реальном мире, где метасимволы являются необходимыми частями пользовательского ввода, невелики.Гораздо лучшим подходом является наличие согласованного режима фильтрации выходных данных базы данных и преобразования их в HTML-объекты, такие как quot, gt и lt.Rails сделает это за вас автоматически.

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

Помимо этих функций, ошибка № 1, которую вы, вероятно, совершите в своем приложении, заключается в том, что вы где-то предоставляете идентификатор строки базы данных, чтобы пользователь X мог видеть данные для пользователя Y, просто изменив число с "5" на "6".

bool UserCredentialsOK(User user)
{

    if (user.Name == "modesty")
        return false;
    else
        // perform other checks
}   

АТАКИ с ИСПОЛЬЗОВАНИЕМ SQL-ИНЪЕКЦИЙ.Их легко избежать, но они слишком распространены.

НИКОГДА В ЖИЗНИ (я упоминал "когда-либо"?) не доверяйте информации о пользователе, передаваемой вам из элементов формы.Если ваши данные не проверяются перед передачей на другие логические уровни вашего приложения, вы с таким же успехом можете отдать ключи от своего сайта незнакомому человеку на улице.

Вы не указываете, на какой платформе вы работаете, но если используете ASP.NET начните со старого доброго Скотта Гатри и его статьи "Совет/Хитрость:Защита от атак SQL-инъекций".

После этого вам нужно решить, какой тип данных вы разрешите пользователям вводить в вашу базу данных и, в конечном итоге, выводить из нее.Если вы разрешаете вставлять HTML-код, а затем представлять его позже, вы широко открыты для межсайтовых скриптовых атак (известных как XSS).

Это те двое, которые приходят мне на ум, но у нашего собственного Джеффа Этвуда была хорошая статья в Кодирующий Ужас с рецензией на книгу "19 Смертных грехов безопасности программного обеспечения".

Большинство людей здесь упоминали SQL-инъекцию и XSS, которые вроде того правильно, но не обманывайтесь - самое важное, о чем вам нужно беспокоиться как веб-разработчику, - это ПРОВЕРКА ВХОДНЫХ ДАННЫХ, откуда берутся XSS и SQL-инъекции.

Например, если у вас есть поле формы, которое всегда будет принимать только целые числа, убедитесь, что вы реализуете что-то как на стороне клиента, так и на стороне сервера для очистки данных.

Проверяйте и перепроверяйте любые входные данные, особенно если они должны попасть в SQL-запрос.Я предлагаю создать экранирующую функцию и обернуть ее вокруг всего, что входит в запрос.Например:

$query = "SELECT field1, field2 FROM table1 WHERE field1 = '" . myescapefunc($userinput) . "'";

Аналогично, если вы собираетесь отобразить любую введенную пользователем информацию на веб-странице, убедитесь, что вы удалили любую <script> tags or anything else that might result in Javascript execution (such as onLoad= onMouseOver= etc.атрибуты в тегах).

Это также короткая презентация по безопасности от одного из основных разработчиков WordPress.

Безопасность в WordPress

в нем рассматриваются все основные проблемы безопасности в веб-приложениях.

Наиболее распространенными, вероятно, являются атаки с внедрением базы данных и атаки с использованием межсайтовых скриптов;главным образом потому, что их проще всего выполнить (вероятно, потому, что программисты ленивы больше всего).

Вы можете видеть даже на этом сайте, что самые опасные вещи, о которых вы будете заботиться, связаны с внедрением кода в ваше приложение, поэтому XSS (межсайтовый скриптинг) и SQL-инъекция (предложения @Patrick's) - это ваши самые большие проблемы.По сути, вы захотите убедиться, что если ваше приложение позволяет пользователю вводить какой бы то ни было код, оно регулируется и тестируется, чтобы быть уверенным, что передаются только те вещи, которые вы уверены, что хотите разрешить (html-ссылка, изображение и т.д.), и больше ничего не выполняется.

SQL-инъекция.Межсайтовый скриптинг.

Использование хранимых процедур и / или параметризованных запросов значительно защитит вас от внедрения sql.Также делайте НЕТ попросите ваше веб-приложение получить доступ к базе данных как sa или dbo - настройте стандартную учетную запись пользователя и установите разрешения.

ЧТО касается XSS (межсайтовый скриптинг) ASP.NET имеет некоторые встроенные средства защиты.Лучше всего фильтровать входные данные с помощью элементов управления проверкой и регулярных выражений.

Я не эксперт, но из того, что я узнал до сих пор, золотое правило заключается в том, чтобы не доверять никаким пользовательским данным (GET, POST, COOKIE).Распространенные типы атак и как спастись:

  1. Атака SQL-инъекцией:Используйте подготовленные запросы
  2. Межсайтовый скриптинг:Не отправляйте пользовательские данные в браузер без предварительной фильтрации / экранирования.Сюда также входят пользовательские данные, хранящиеся в базе данных, которые изначально поступили от пользователей.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top