От ошибки до уязвимости… Алексей Синцов Digital Security twitter.com/asintsov
Программа…
Программа
Ошибка
Эксплуатация Уязвимость Ошибка
Кто ищет уязвимости ?
Такие разные… Переполнение буфера Межсайтовый скриптинг Инъекция SQL кода Отсутствие авторизации Ошибки логики Обход аутентификации И многое другое…..
Примеры. Идейные ошибки - 1 PepsiCo Coca-Cola Johnson & Johnson Lockheed Martin McDonnell-Douglas Sony Danon Mercedes-Benz Ford Motor Mazda Motor Corporation Heineken
Аутентификация
Атака
Эксплойт XOR EAX, EAX
Где ошибка? Производить аутентификацию на стороне клиента - НЕправильно!
Примеры. Идейные ошибки - 2 Условия для атаки: Домен Учетная запись имеет права Локального Администратора Kaspersky Administration Kit
Сканирование и атака
Что делать? Надо было предусмотреть возможностьSMBRelay! Надо было лучше документировать. Надо было предусмотреть возможностьSMBRelay! Надо было лучше документировать.
Примеры. Ошибки в коде - 1 Отечественная система Банк-Клиент ActiveX компонент для работы с ЭЦП:
Примеры. BoF Отечественная система Банк-Клиент char* vuln(char *bufferOut, char *fileName){ char *errorText="Ошибка при создании файла с именем %1."; while(!*errorText) { if(errorText=='%' && (errorText+1)
Примеры. BoF
Что делать? Проводить обзор кода. Использовать современный VS. Использовать флаги Защиты: /GS /SafeSEH Проводить обзор кода. Использовать современный VS. Использовать флаги Защиты: /GS /SafeSEH
Примеры. Ошибки в коде - 2 Lotus Domino Controller
Примеры. Ошибки в коде - 2 Аутентификация Пользователь -> {Login, Password, cookiefilename} -> Lotus Domino Controller Имя файла на сервере Lotus с базой учетных записей и с хэшами паролей © Patrik Karlsson and ZDI
Примеры. Ошибки в коде - 2 Аутентификация File file = new File(cookieFilename);... inputstreamreader = new InputStreamReader(new FileInputStream(file), "UTF8");... inputstreamreader.read(ac, 0, i);... String s7 = new String(ac);...
do { if((j = s7.indexOf("", j); if(k == -1) break; String s2 = getStringToken(s7, "user=\"", "\"", j, k);... String s3 = getStringToken(s7, "cookie=\"", "\"", j, k);... String s4 = getStringToken(s7, "address=\"", "\"", j, k);... if(usr.equalsIgnoreCase(s2) && pwd.equalsIgnoreCase(s3) &&\ appletUserAddress.equalsIgnoreCase(s4)) { flag = true; break; }... } while(true);
Примеры. Ошибки в коде - 2 Обход аутентификации echo ^ > n:\domino2\zdi0day_.txt
Что делать? Проводить обзор кода.
Примеры. Исправление. Аутентификация File file = new File(./+cookieFilename);... inputstreamreader = new InputStreamReader(new FileInputStream(file), "UTF8");... inputstreamreader.read(ac, 0, i);... String s7 = new String(ac);...
do { if((j = s7.indexOf("", j); if(k == -1) break; String s2 = getStringToken(s7, "user=\"", "\"", j, k);... String s3 = getStringToken(s7, "cookie=\"", "\"", j, k);... String s4 = getStringToken(s7, "address=\"", "\"", j, k);... if(usr.equalsIgnoreCase(s2) && pwd.equalsIgnoreCase(s3) &&\ appletUserAddress.equalsIgnoreCase(s4)) { flag = true; break; }... } while(true); s7.substring(..)
Новая атака Valid cookie2.xml.trash: There is a good and blah-blah-blah cookie.xml
Новая атака Valid cookie2.xml.trash:
Новая атака Valid cookie2.xml.trash:
Новая атака Valid cookie2.xml.trash:
Демонстрация 0day
Что делать? Проводить обзор кода. Автоматизированных средств не достаточно Проводить обзор кода. Автоматизированных средств не достаточно
PS.
WEB Не XSS, не SQLi… что-то новое хотим!
Google docs
Как это выглядит? Пользователь.
Как это выглядит? Создатель.
Как атаковать? Это же Exсel Засунем =A1+B1
Как атаковать? Засунем %08=A1+B1 Yaaahooo!!
Уязвимость?
Где ошибка? Проводить Фаззинг. Анализировать бизнес функции. Проводить Фаззинг. Анализировать бизнес функции.
Как делать это правильно ? Анализировать логику и функционал с точки зрения угроз UnitTests Анализировать код Автоматически В ручную, дополнительно, делать ревью кода Использовать технологии снижения рисков: C/C++ /GS /SafeSEH /DinamicBase WEB HTTPOnly Secure X-Frame-options Анализ типовых угроз и best practices. Анализ ролевой модели Анализ схем СУБД
Как ищут? Статический анализ Source code review regexp формальные методы руками… Reverse Engineering формальные методы сигнатуры руками… Динамический анализ Fuzzing (bin/web) + Типичные уязвимости для данного типа + Reverse Engineering Руками… Обзор архитектуры (логические ошибки) Ошибки в 3 rd party- в базе CVE
Автоматизация SQLMap Peach RATS Flawfinder Fuzzers Source Code Analyzers COMRaider Sulley Yasca
Разработка (с) OWASP
Спасибо за внимание
Пожалуйста, поставьте оценку моему докладу. Ваше мнение очень важно. Спасибо!