Download pptx - PHDays 2013 - Java everyday

Transcript
Page 1: PHDays 2013 - Java everyday

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

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

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

Page 2: PHDays 2013 - Java everyday

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

Page 3: PHDays 2013 - Java everyday

Java-0day.com

Page 4: PHDays 2013 - Java everyday

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

Page 5: PHDays 2013 - Java everyday

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

Page 6: PHDays 2013 - Java everyday

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

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

Page 7: PHDays 2013 - Java everyday

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

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

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

Page 8: PHDays 2013 - Java everyday

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

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

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

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

данных

Page 9: PHDays 2013 - Java everyday

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

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

Page 10: PHDays 2013 - Java everyday

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

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

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

Page 11: PHDays 2013 - Java everyday

Security Manager.Namespace

Page 12: PHDays 2013 - Java everyday

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

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

Page 13: PHDays 2013 - Java everyday

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

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

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

Page 14: PHDays 2013 - Java everyday

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

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

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();

Page 15: PHDays 2013 - Java everyday

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

Page 16: PHDays 2013 - Java everyday

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

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

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

Page 17: PHDays 2013 - Java everyday

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

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

Page 18: PHDays 2013 - Java everyday

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

Байт-код

Page 19: PHDays 2013 - Java everyday

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

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

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

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

Page 20: PHDays 2013 - Java everyday

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

Page 21: PHDays 2013 - Java everyday

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

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

Page 22: PHDays 2013 - Java everyday

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

Page 23: PHDays 2013 - Java everyday

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

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

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

Page 24: PHDays 2013 - Java everyday

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

Page 25: PHDays 2013 - Java everyday

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

Page 26: PHDays 2013 - Java everyday

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

Page 27: PHDays 2013 - Java everyday

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

Page 28: PHDays 2013 - Java everyday

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

Page 29: PHDays 2013 - Java everyday

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

Page 30: PHDays 2013 - Java everyday

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

Page 31: PHDays 2013 - Java everyday

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

Page 32: PHDays 2013 - Java everyday

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

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

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

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

Page 33: PHDays 2013 - Java everyday

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

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

Page 34: PHDays 2013 - Java everyday

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

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

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

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

Page 35: PHDays 2013 - Java everyday

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

Page 36: PHDays 2013 - Java everyday

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

классы

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

Page 37: PHDays 2013 - Java everyday

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

Page 38: PHDays 2013 - Java everyday

• 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

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

Page 39: PHDays 2013 - Java everyday

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

Page 40: PHDays 2013 - Java everyday

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

Page 41: PHDays 2013 - Java everyday

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

Page 42: PHDays 2013 - Java everyday

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

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

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

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

Page 43: PHDays 2013 - Java everyday

• …

Вопросы?