Не вызывает сомнения необходимость проведения тестов на проникновение в качестве подтверждения эффективности функционирования используемых в Компании средств обеспечения информационной безопасности. Но чем больше я участвую в подобных проектах со стороны Заказчика тем больше меня терзают "смутные сомнения". В данном посте я попробую объяснить свое волнение и что-то предложить для успокоения. Здесь я пытаюсь не столько поделиться опытом, сколько навести порядок в собственных ощущениях.
1. Насколько они компетентны? Первый вопрос, на который хочется иметь ответ при выборе подрядчика. В крупной компании, как правило, в тендере побеждает тот, кто предложил минимальную стоимость при заданном качестве, а "заданное качество" в данном вопросе описать очень сложно. Одно дело просто пройтись сканером безопасности и распечатать его отчет в итоговый документ, другое дело, используя имеющийся опыт и собственные средства провести глубокий анализ каждой возможной зацепки, что, бесспорно, не выполнить автоматизированными средствами, доступными любому script kiddie. Соответственно, ценовое преимущество здесь на стороне Детей.
Что же можно с этим поделать? На мой взгляд хорошим отличительным признаком Профессионалов является наличие собственной исследовательской лаборатории доказательства существования которой должны масштабно присутствовать в Интернет в виде подтверждений производителей ПО о существовании уязвимостей, обнаруженных нашими Профессионалами (Security advisory). Причем, чем больше уязвимостей обнаружили наши Профессионалы в "свободное от работы время" тем выше их уровень как в методологии, так и на практике, тем больше у них опыта, и, самое главное, они в курсе всех современных тенденций в безопасности.
2. Нашли ли они все? Вопрос, на который нельзя получить ответ. Проблема имеет идеологическую составляющую, заключающуюся в том, что задача пентеста - выполнить проникновение, т.е. если даже наши Профессионалы найдут одну уязвимость, эксплуатируют ее, выполнят проникновение, - на этом формально они могут закончить работу и успокоиться. Работа "тест на проникновение" закончена, проникновение выполнено. Вторая составляющая - общефилософская: никакое количество обнаруженных уязвимостей не гарантирует отсутствие новых.
Что можно здесь предпринять? Очевидно, что пентест надо заказывать только в случае, когда все проведенные своими силами проверки указывают на то, что система не имеет недостатков. В данном случае чем выше квалификация собственных специалистов, проводящих аудит безопасности, предшествующий заказанному пентесту Профессионалов, тем выше эффективность работы Профессионалов, тем больший процент мозга им придется использовать для взлома системы, тем более тонкие места они исследуют. Отсюда следствие - заказной пентест не отменяет аудита штатными высококвалифицированными специалистами.
3. Показали ли они все? Вопрос еще более сложный чем предыдущий. Понимаю, что он имеет этическую составляющую. Но, к сожалению, в мире бизнеса все меньше места этике. Возможен следующий сценарий, назовем его мелкое мошенничество. Нормальной практикой является проведения двух аудитов: первый обнаруживает уязвимости, второй - подтверждает, что обнаруженные уязвимости были успешно закрыты. Есть риск, что беспринципный пентестер может умолчать о ряде уязвимостей, обнаруженных в первый аудит, чтобы показать свою "высокую эффективность" во втором. Ситуация еще более удобная, если второй пентест проводится не по мотивам предыдущего (т.е. проверяются только обнаруженные ранее проблемы, а новые не ищутся), а вновь полноценный аудит, аналогичный первому.
Немелкое мошенничество в нашем случае - когда целью умалчивания уязвимостей является, скажем, их последующее корыстное использование. Ужасно! Это звучит несколько жестоко, но тут дело даже не в компании-консультанте вцелом, речь идет о людях. Ребята-хакеры - это прежде всего люди и даже при условии работы моего излюбленного принципа, что нет плохих людей, а есть обстоятельства, заставляющие людей поступать нехорошо, одному Богу известно в какой жизненной ситуации суждено им побывать, и никакие NDA здесь не спасут.
Противостоять этому можно множеством способов, но не один не дает гарантии. Прежде всего, надо мотивировать аудитора "выкладывать все". Очевидно, что лучшая мотивация - это $, поэтому здесь поможет какая-либо привязка вознаграждения за аудит к количеству обнаруженных проблем. Причем, чтобы не работало мелкое мошенничество, вознаграждение за первый аудит должно быть немного больше.
Веской контрмерой может быть имидж консультанта, например, я бы никогда не доверился вот этим парням. Ну и, российская специфика, - личные взаимоотношения, безусловно, влияющие на внутреннее мнение заказчика о предполагаемом консультанте.
4. Закрыли ли мы все?
Вопрос очень тонкий, так как закрывать уязвимости можно по-разному. Как минимум, можно закрывать конкретную дырку, а можно закрывать сразу целый класс однотипных уязвимостей. Можно поступить еще более эффективно - сделать уязвимость невозможной. Чтобы было понятно, приведу пример: обнаружена уязвимость - на всех серверах UNIX пароль root простой и одинаковый, как следствие был подобран и серверы были компрометированы. Здесь закрытие конкретной уязвимости - смена пароля на более сложный на всех серверах UNIX, закрытие класса уязвимостей "простые пароли" - переход на централизованную систему аутентификации с заданной политикой сложности паролей, сделать уязвимость невозможной - запретить сетевой вход пользователем root (и прочими критичными учетными записями) вообще или по пролю (оставив, например, возможность аутентификации по ключу SSH).
Более того, чтобы проверять качество закрытия уязвимостей, как правило, нужна квалификация не ниже квалификации пентестера, откуда следует необходимость повторного освидетельствования, обладающая всеми перечсленными рисками. Замкнутый круг.
В заключительном слове я хочу отметить, что пентест - вешь полезная, но использовать ее надо при определенных обстоятельствах, с учетом множества факторов. И если все правильно взвесить - эффективность его будет максимальна при минимальных затратах. В остальных случаях лучше выбирать аудит безопасности, задачи которого - обнаружить максимальное количество уязвимостей, а не показать фокус в виде успешного эксплоатирования одной или нескольких. Ну и, стандартно, собственные высококвалифицированные специалисты способны в значительной степени повысить эффективность внешнего пентеста и снизить описанные здесь риски.