Alexei Sintsov - "Between error and vulerability - one step"

Preview:

Citation preview

От ошибки до уязвимости…

Алексей Синцов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/asintsova.sintsov@dsec.ru

Пожалуйста, поставьте оценку моему докладу.

Ваше мнение очень важно.

Спасибо!