alexei sintsov - "between error and vulerability - one step"

49
От ошибки до уязвимости… Алексей Синцов Digital Security twitter.com/asintsov

Upload: andrew-mayorov

Post on 15-Jun-2015

496 views

Category:

Art & Photos


0 download

TRANSCRIPT

Page 1: Alexei Sintsov - "Between error and vulerability - one step"

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

Алексей СинцовDigital Security

twitter.com/asintsov

Page 2: Alexei Sintsov - "Between error and vulerability - one step"

Программа…

http://www.flickr.com/photos/lofink/4501610335/

Page 3: Alexei Sintsov - "Between error and vulerability - one step"

Программа

http://www.flickr.com/photos/lofink/4501610335/

Page 4: Alexei Sintsov - "Between error and vulerability - one step"

Ошибка

http://www.flickr.com/photos/lofink/4501610335/

Page 5: Alexei Sintsov - "Between error and vulerability - one step"

Эксплуатация

http://www.flickr.com/photos/lofink/4501610335/

Уязвимость

Ошибка

Page 6: Alexei Sintsov - "Between error and vulerability - one step"

Кто ищет уязвимости ?

http://www.flickr.com/photos/rufo_83/3154516530/

Page 7: Alexei Sintsov - "Between error and vulerability - one step"

Такие разные…

• Переполнение буфера• Межсайтовый скриптинг• Инъекция SQL кода• Отсутствие авторизации• Ошибки логики• Обход аутентификации• И многое другое…..

Page 8: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Идейные ошибки - 1

• PepsiCo• Coca-Cola• Johnson & Johnson• Lockheed Martin• McDonnell-Douglas• Sony

• Danon• Mercedes-Benz• Ford Motor• Mazda Motor Corporation• Heineken

Page 9: Alexei Sintsov - "Between error and vulerability - one step"

Аутентификация

Page 10: Alexei Sintsov - "Between error and vulerability - one step"

Атака

Page 11: Alexei Sintsov - "Between error and vulerability - one step"

Эксплойт

XOR EAX, EAX

Page 12: Alexei Sintsov - "Between error and vulerability - one step"

Где ошибка?Производить аутентификацию на стороне клиента - НЕправильно!

Page 13: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Идейные ошибки - 2

Условия для атаки:• Домен• Учетная запись имеет

права Локального Администратора

Kaspersky Administration Kit

Page 14: Alexei Sintsov - "Between error and vulerability - one step"

Сканирование и атака

Page 15: Alexei Sintsov - "Between error and vulerability - one step"

Что делать?Надо было предусмотреть возможностьSMBRelay!

Надо было лучше документировать.

Page 16: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Ошибки в коде - 1Отечественная система Банк-Клиент

ActiveX компонент для работы с ЭЦП:

Page 17: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. 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;}

Page 18: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. BoF

Page 19: Alexei Sintsov - "Between error and vulerability - one step"

Что делать?Проводить обзор кода.

Использоватьсовременный VS.

Использовать флагиЗащиты: /GS /SafeSEH

Page 20: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Ошибки в коде - 2Lotus Domino Controller

Page 21: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Ошибки в коде - 2Аутентификация

Пользователь -> {Login, Password, cookiefilename} -> Lotus Domino Controller

Имя файла на сервере Lotus с базой учетных записей и с хэшами паролей

© Patrik Karlsson and ZDI

Page 22: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Ошибки в коде - 2Аутентификация

File file = new File(cookieFilename); . . .

inputstreamreader = new InputStreamReader(new FileInputStream(file), "UTF8");

. . . inputstreamreader.read(ac, 0, i); . . .

String s7 = new String(ac); . . .

Page 23: Alexei Sintsov - "Between error and vulerability - one step"

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

Page 24: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Ошибки в коде - 2Обход аутентификации

echo ^ <user name=“admin" cookie=“dsecrg" address=“10.10.0.1"^> > n:\domino2\zdi0day_.txt

Page 25: Alexei Sintsov - "Between error and vulerability - one step"

Что делать?Проводить обзор кода.

Page 26: Alexei Sintsov - "Between error and vulerability - one step"

Примеры. Исправление.Аутентификация

File file = new File(“./”+cookieFilename); . . .

inputstreamreader = new InputStreamReader(new FileInputStream(file), "UTF8");

. . . inputstreamreader.read(ac, 0, i); . . .

String s7 = new String(ac); . . .

Page 27: Alexei Sintsov - "Between error and vulerability - one step"

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

Page 28: Alexei Sintsov - "Between error and vulerability - one step"

Новая атака

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

Page 29: Alexei Sintsov - "Between error and vulerability - one step"

Новая атака

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

Page 30: Alexei Sintsov - "Between error and vulerability - one step"

Новая атака

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

Page 31: Alexei Sintsov - "Between error and vulerability - one step"

Новая атака

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

Page 32: Alexei Sintsov - "Between error and vulerability - one step"

Демонстрация 0day

Page 33: Alexei Sintsov - "Between error and vulerability - one step"

Что делать?Проводить обзор кода.

Автоматизированных средств не достаточно

Page 34: Alexei Sintsov - "Between error and vulerability - one step"

PS.

Page 35: Alexei Sintsov - "Between error and vulerability - one step"

WEB

Не XSS, не SQLi… что-то новое хотим!

Page 36: Alexei Sintsov - "Between error and vulerability - one step"

Google docs

Page 37: Alexei Sintsov - "Between error and vulerability - one step"

Как это выглядит?Пользователь.

Page 38: Alexei Sintsov - "Between error and vulerability - one step"

Как это выглядит?Создатель.

Page 39: Alexei Sintsov - "Between error and vulerability - one step"

Как атаковать?

Это же Exсel

Засунем =A1+B1

Page 40: Alexei Sintsov - "Between error and vulerability - one step"

Как атаковать?

Засунем %08=A1+B1

Yaaahooo!!

Page 41: Alexei Sintsov - "Between error and vulerability - one step"

Уязвимость?

Page 42: Alexei Sintsov - "Between error and vulerability - one step"

Уязвимость?

Page 43: Alexei Sintsov - "Between error and vulerability - one step"

Где ошибка?Проводить Фаззинг.

Анализировать бизнес функции.

Page 44: Alexei Sintsov - "Between error and vulerability - one step"

Как делать это правильно ?• Анализировать логику и функционал с точки зрения угроз

• UnitTests• Анализировать код

• Автоматически • В ручную, дополнительно, делать ревью кода

• Использовать технологии снижения рисков:• C/C++

• /GS • /SafeSEH• /DinamicBase

• WEB• HTTPOnly• Secure• X-Frame-options

• Анализ типовых угроз и best practices.• Анализ ролевой модели• Анализ схем СУБД

Page 45: Alexei Sintsov - "Between error and vulerability - one step"

Как ищут?Статический анализ

• Source code review• regexp• формальные методы• руками…

• Reverse Engineering• формальные методы• сигнатуры• руками…

Динамический анализ• Fuzzing (bin/web)

+ Типичные уязвимости для данного типа+ Reverse Engineering

• Руками…Обзор архитектуры (логические ошибки)Ошибки в 3rd party- в базе CVE

Page 46: Alexei Sintsov - "Between error and vulerability - one step"

Автоматизация

SQLMap

Peach

RATS

Flawfinder

Fuzzers Source Code Analyzers

COMRaider

SulleyYasca

Page 47: Alexei Sintsov - "Between error and vulerability - one step"

Разработка

(с) OWASP

Page 48: Alexei Sintsov - "Between error and vulerability - one step"

Спасибо за внимание

www.twitter.com/[email protected]

Page 49: Alexei Sintsov - "Between error and vulerability - one step"

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

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

Спасибо!