alexei sintsov - "between error and vulerability - one step"
TRANSCRIPT
От ошибки до уязвимости…
Алексей СинцовDigital Security
twitter.com/asintsov
Программа…
http://www.flickr.com/photos/lofink/4501610335/
Программа
http://www.flickr.com/photos/lofink/4501610335/
Ошибка
http://www.flickr.com/photos/lofink/4501610335/
Эксплуатация
http://www.flickr.com/photos/lofink/4501610335/
Уязвимость
Ошибка
Кто ищет уязвимости ?
http://www.flickr.com/photos/rufo_83/3154516530/
Такие разные…
• Переполнение буфера• Межсайтовый скриптинг• Инъекция 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!
Надо было лучше документировать.
Примеры. Ошибки в коде - 1Отечественная система Банк-Клиент
ActiveX компонент для работы с ЭЦП:
Примеры. BoFОтечественная система Банк-Клиент
char* vuln(char *bufferOut, char *fileName){ char *errorText="Ошибка при создании файла с именем ‘%1’."; while(!*errorText) { if(errorText=='%' && (errorText+1)<'9') // замена %1 { strcpy(bufferOut,fileName); //errorText rewrite! bufferOut+=strlen(fileName); //увеличиваем указатель *errorText++; } *bufferOut++=*errorText++; //Stack overflow (errorText<bufferOut) } return *bufferOut;}
Примеры. BoF
Что делать?Проводить обзор кода.
Использоватьсовременный VS.
Использовать флагиЗащиты: /GS /SafeSEH
Примеры. Ошибки в коде - 2Lotus 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("<user ", j)) <= 0) break;
int k = 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 ^ <user name=“admin" cookie=“dsecrg" address=“10.10.0.1"^> > 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("<user ", j)) <= 0) break;
int k = 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 <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray!>and blah-blah-blah
<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" address=“10.10.0.1">
cookie.xml
Новая атака
Valid
cookie2.xml.trash:There is a good <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray!>and blah-blah-blah
<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" address=“10.10.0.1">
cookie.xml
Новая атака
Valid
cookie2.xml.trash:There is a good <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray!>and blah-blah-blah
<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" address=“10.10.0.1">
cookie.xml
Новая атака
Valid
cookie2.xml.trash:There is a good <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray!>and blah-blah-blah
<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" address=“10.10.0.1">
cookie.xml
Valid
Демонстрация 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
• Руками…Обзор архитектуры (логические ошибки)Ошибки в 3rd party- в базе CVE
Автоматизация
SQLMap
Peach
RATS
Flawfinder
Fuzzers Source Code Analyzers
COMRaider
SulleyYasca
Разработка
(с) OWASP
Спасибо за внимание
www.twitter.com/[email protected]
Пожалуйста, поставьте оценку моему докладу.
Ваше мнение очень важно.
Спасибо!