Lukatsky150x200.jpgАлексей Лукацкий - менеджер по развитию бизнеса Cisco Systems

Мы уже рассматривали миф о возможности антивирусов обнаруживать неизвестные вирусы. А так как антивирусы и IDS по своему функционированию мало чем отличаются друг от друга, то уже описанный миф применим и к системам обнаружения атак. Но я решил пойти чуть дальше и показать, что сигнатурные технологии обнаружения вредоносной активности, заложенные в современные защитные средства, являющиеся лидерами российского и международного рынка, обладают фундаментальным недостатком, о котором еще в начале 21-го века предупреждала лаборатория компании HP.

В качестве примера возьмем достаточно старого червя Kak (также известного как VBS.Kak.Worm, VBS.Kak.Worm.dr, Kagou-Anti-Krosoft, Wscript.Kak.A, JS/Kak.Worm [Panda], Mid/Kakworm, JS_KAKWORM.A [Trend], I-Worm.KakWorm [Kaspersky], JS/Kak@M [McAfee], VBS/Kakworm [Sophos]), обнаруженного в декабре далекого 1999-м года. Логично предположить, что его ловят все современные антивирусы и системы обнаружения вторжений. А теперь посмотрим, что может сделать любой, даже неквалифицированный злоумышленник с этим червем. Но прежде скажу, что по состоянию на январь 2008-го года из 31-го популярного антивируса червь Kak не ловили 11 производителей.

Исходный код вредоносной программы Kak можно найти на многих «хакерских» сайтах. Я не буду приводить их ссылки, дабы не провоцировать читателя на эксперименты. С этим же связан и выбор червя и даты баз сигнатур, по которым проводилось экспресс-исследование. Итак, берем исходный код на языке Visual Basic Script (VBS) и разбиваем текстовые строки на фрагменты. Например, вместо фрагмента «SCRIPT» будет два фрагмента «SCRI» и «PT». И вот уже из 31-ти одного проверяемого защитного продукта слегка измененный червь обнаруживается только 16-тью из них.

Вторым шагом мы изменим имя создаваемых червем файлов с «kak» на, например, «kok». В этом случае рекомендация многих производителей защитных средств искать и удалять файлы с именем «kak.*» уже не помогут – мы поменяли имя вредоносной программы. И вот уже ее обнаруживают только 13 антивирусов. Код по-прежнему легко узнаваем. Устраним и этот недостаток – запишем червя в шестнадцатеричном коде. И вот уже в списке обнаружителей осталось только 9 имен и ни один не опознает модифицированный червь, как оригинальную вредоносную программу. Дальше больше. Зашифруем код червя и поместим в начало червя функцию его расшифрования. И вот уже ни одно из проанализированных антивирусных решений не справляется с задачей обнаружения вредоносной программы.

Возьмем другой пример, который касается уже именно систем обнаружения вторжений, ориентированных в первую очередь на сигнатурный принцип. Возьмем старую уязвимость переполнения буфера в OpenSSH ( CVE-2002-0639), датированную 2002-м годом. Сразу же после ее появления появился код атаки (эксплоит), созданный злоумышленником по имени GOBBLES. Теша свое самолюбие, он включил свое имя в код эксплоита, а производители средств обнаружения вторжения стали обнаруживать эту атаку как раз по этому имени. Например, NetScreen IDP:

("SSH:OPENSSH:GOBBLES-SSH-EXPLOIT"

            :rectype (signature)

            :signature (

                        :pattern ("SSH-2.0-GOBBLES.*")

                        :offset (0)

                        :type (stream)

            )

            :type (attack-ip)

            :service (ssh)

            :direction (cts)

            :flow (control)

            :severity (7)

            :false-positives (unknown)

            :product (OpenSSH)

)

Мы видим, что сигнатура построена на поиске в сетевом трафике слова «GOBBLES». Достаточно поменять в исходном коде атаки:

snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s\n",

                compat20 ? PROTOCOL_MAJOR_2 : PROTOCOL_MAJOR_1,

                compat20 ? PROTOCOL_MINOR_2 : minor1,

-               SSH_VERSION);

+              "GOBBLES");

букву «G» на любую другую и атака уже не будет обнаружена.

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

И по-прежнему, основным способом обнаружения вредоносной активности остаются сигнатуры. А значит надо быть готовым к тому, что даже самые лучшие IDS/IPS не смогут обнаруживать все атаки, направленные на вашу компанию.