О врагах семейства кошачьих

ecc8e8c54da3d2a8ac98256860a

В любой современной системе бесконечно много точек, в которых может проявляться присутствие трояна. Хаотичный анализ всех этих точек не только трудоемок, но и в корне неверен.
Фундаментальная задача при ручном поиске троянов — свести бесконечное многообразие троянских признаков к минимальному количеству векторов поиска, грамотная проработка которых гарантирует достижение цели. Нужно понять суть троянской программы, ее системообразующий принцип. Зная принцип, разработать надежный алгоритм поиска зловредов в произвольной системе, даже ранее неизвестной, — дело техники. Это то, чему мы учим на своих семинарах, где готовят настоящих сисадминов-киберниндзя.
Итак, вначале общий принцип, затем универсальная методика и наконец — особенности Мака. Но сперва — disclaimer:
1. Мы ищем только ядро атаки — троян, который живет в системе и совершает в ней какие-то действия. Мы не ищем одноразовые трояны (это бессмысленно), компоненты доставки трояна, такие как drive-by-скрипты, эксплойты, дропперы (это задача для отдельного исследования) и засвеченные на той или иной конференции концептуальные техники (большинство из них неприменимы в реальности).
2. Если обследуемая система представляет ценность как мишень для промышленного или политического шпионажа, то материалов этой статьи заведомо недостаточно, так как целевые трояны проектируются с учетом известных методик форензики.
ПРИНЦИП
У любого трояна есть несколько фундаментальных «жизненных потребностей». Это первичные классовые признаки, которые характерны абсолютно для всех троянов, независимо их от функционала и платформы. Вот они:
1. Троян где-то хранит свой код.
2. Троян откуда-то получает управление в процессе загрузки системы.
3. Троян реализует свое предназначение (нагрузка и контакте хозяином).
4. Троян может скрывать все вышеперечисленное. А может не скрывать.
Идея в том, чтобы сфокусироваться только на поиске этих первичных признаков, и только тех из них, которые действительно необходимы.
На самом деле достаточно поиска по одному пункту (2). Любой троян откуда-то стартует, поэтому грамотный анализ этого вектора — для краткости назовем его «автозагрузки» — может дать такой же результат, как если бы мы последовали всему плану, но с меньшими усилиями. А руткиты мы просто обойдем стороной: руткит может скрыть что-либо только в работающей системе, а мы анализируем систему в статике.
Итак, поскольку поверхность анализа нормирована до предела, алгоритм поисков должен быть исчерпывающим «by design», чтобы ничего не упустить.