Алексей Синцов. От ошибки до уязвимости один шаг

advertisement
От ошибки до уязвимости…
Алексей Синцов
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
Примеры. Ошибки в коде - 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("<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;
s7.substring(..)
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);
Новая атака
cookie.xml
<?xml version="1.0" encoding="UTF-8"?>
<user name=“admin" cookie=“dsecrg"
address=“10.10.0.1">
cookie2.xml.trash:
There is a good <user xml file!
andname=“admin”willbefound
as cookie=“dsecrg” andaddress=“10.10.0.1”hooray!
>and blah-blah-blah
Valid
Новая атака
cookie.xml
<?xml version="1.0" encoding="UTF-8"?>
<user name=“admin" cookie=“dsecrg"
address=“10.10.0.1">
cookie2.xml.trash:
There is a good <user xml file!
andname=“admin”willbefound
as cookie=“dsecrg” andaddress=“10.10.0.1”hooray!
>and blah-blah-blah
Valid
Новая атака
cookie.xml
<?xml version="1.0" encoding="UTF-8"?>
<user name=“admin" cookie=“dsecrg"
address=“10.10.0.1">
cookie2.xml.trash:
There is a good <user xml file!
andname=“admin”willbefound
as cookie=“dsecrg” andaddress=“10.10.0.1”hooray!
>and blah-blah-blah
Valid
Новая атака
cookie.xml
<?xml version="1.0" encoding="UTF-8"?>
<user name=“admin" cookie=“dsecrg"
address=“10.10.0.1">
cookie2.xml.trash:
There is a good <user xml file!
andname=“admin”willbefound
as cookie=“dsecrg” andaddress=“10.10.0.1”hooray!
>and blah-blah-blah
Valid
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
Автоматизация
Source Code
Analyzers
Fuzzers
SQLMap
Peach
RATS
Flawfinder
COMRaider
Sulley
Yasca
Разработка
(с) OWASP
Спасибо за внимание
www.twitter.com/asintsov
a.sintsov@dsec.ru
Пожалуйста, поставьте
оценку моему докладу.
Ваше мнение очень важно.
Спасибо!
Download