phdays 2013 - java everyday

Post on 20-Jun-2015

683 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Системный анализ эксплойтов нулевого дня

TRANSCRIPT

Java EverydayСистемный анализ эксплойтов нулевого дня в Java

Рютин Борис@dukebarman

«Цифровое оружие и защита» © 2013

Java в опасности?

Java-0day.com

Статистика по использованию эксплойтов в сплойт-паках

Ключевые термины Java

Аспекты безопасности

• Реализация языка• Контроль доступа• Подпись кода

Уровни доступа

• Private – только для своего класса• Protected – для подкласса и классов в

пределах пакета• Public – всем• Package – для классов в пределах пакета

Верификатор байт-кода

• Соответствие спецификации языка Java• Не нарушает ограничения пространства

имен• Нарушения в управлении памятью• Выходы за нижнюю границу стека (или

переполнения)• Недопустимые преобразования типа

данных

Security Manager. Policy• Server• Applet (браузер)• Application

Файл Java.policyC:\Program Files\Java\jre7\lib\security\

Security Manager.Classloader• Java – язык с отложенной загрузкой кода.

Первоначально загружается только один класс – тот, который передан в качестве параметра утилите «java»

• Главный класс приложения всегда загружается системным загрузчиком

Security Manager.Namespace

Обновление с 7u10• Если не обновлена java• Затрагивает безопасность (не подписан или

истек сертификат)

РефлексияРефлексия (от позднелат. reflexio - обращение

назад) - это механизм исследования данных о программе во время её выполнения.

Примеры:• Class c = Class.forName("com.mysql.jdbc.Driver");• Method method = c.getMethod("getCalculateRating", paramTypes)

Сериализация / ДесериализацияСериализация - это процесс сохранения состояния объекта в

последовательность байтдесериализация - это процесс восстановления объекта, из этих байт

BlackBox b=new BlackBox(); // target Applet instanceByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream oos=new ObjectOutputStream(baos);oos.writeObject(b);FileOutputStream fos=new FileOutputStream("BlackBox.ser");fos.write(baos.toByteArray());fos.close();

Настройка среды для анализа

• Уязвимый JDK• Eclipse 4.2• Плагины– Декомпилятор– Байт-код

• Декомпиляторы:– Jd-gui– Jad

Инструментарий

http://feeling.sourceforge.net/updateДекомпиляторы: Jad + JD-core

Плагин-декомпилятор

http://sourceforge.net/projects/drgarbagetools/files/eclipse/4.2/stable

Байт-код

• Скачать JDK• Window -> Preferences -> Java -> Installed

JREs• Edit , выбираем rt.jar, далее • Source Attachment -> External Location и

указываем, например: C:\Program Files\Java\jdk1.7.0_10\src.zip

Подключение исходников

Подключение исходников

Включение Security Manager• Скопировать файл C:\Program Files\Java\jre7\lib\security в

папку bin и назвать java.policy.applet• -Djava.security.manager -Djava.security.policy=java.policy

Включение консоли• Linux: terminal -> cd /java/jre1.6.0_24 -> ./ControlPanel• Windows:

Анализ патчей

Подробности уязвимостей:• http://cve.mitre.org• http://cvedetails.com• http://osvdb.org• https://bugzilla.redhat.com

Исходники:• http://grepcode.com/• http://openjdk.java.net/

Анализ эксплойта нулевого дня2013-0422

Видео 1Компилирование и демонстрация эксплойта

Видео 2Работа с jar

Видео 3Запуск эксплойта после

Пример при компиляции на патченной машине

Отключение ошибок

Обфускацияобход сигнатур антивирусов

Как выглядит .class файл

• Изменение имен перемененных, функций и классов

• Манипуляции со строковыми переменными

• «Размазывание» кода• Применение специфик языка

Методы обфускации

• Class Payload -> Class Sdfuhw• Array shellcode -> Array qdjghheg

Изменение имен

• Разбив строчекString art=“artexploit”;String art=“art”,art1=“exp”,art2=“loit”;

• Применение встроенных функцийString art=“art111exp1111lo111it”;art.replace(“111”,””);

• Криптография– xor, etc.– Свои

Манипуляции со строками

Манипуляции со строками

• Перемешивание строк• Вынос частей кода в отдельные функции и

классы

«Размазывание» кода

«Размазывание» кода

• java.lang.Class– public static Class forName(String className) throws

ClassNotFoundException– public Method getMethod(String name, Class... parameterTypes)

throws NoSuchMethodException, SecurityException– public Object newInstance() throws InstantiationException,

IllegalAccessException

• java.lang.reflect.Method– public Object invoke(Object obj, Object[] args) throws

IllegalAccessException, IllegalArgumentException, InvocationTargetException

Применение специфик языка

Применение специфик языка

Конструктор эксплойтов

Виды конструкторов

• Metasploit, canvas, …• самодельные программы, скрипты– Ruby• В основном как модули для metasploit

– Perl, python• Используются как обертки для Java, в основе своей

чаще всего модули metasploit или наоборот, как основа для будущего модуля

Виды конструкторов

• …

Вопросы?

TZOR.ru

Спасибо!

b.ryutin@tzor.ru

top related