phdays 2013 - java everyday
Post on 20-Jun-2015
683 Views
Preview:
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 или наоборот, как основа для будущего модуля
Виды конструкторов
• …
Вопросы?
top related