'

Безопасность для программиста – все что нужно знать

Понравилась презентация – покажи это...





Слайд 0

Безопасность для программиста – все что нужно знать Сергей Поляков alexei@samara.net CEO WebZavod, MCSD.NET


Слайд 1

План Приоритеты Microsoft – раньше и сейчас Реалии войны за безопасность Как победить?


Слайд 2

Приоритеты Microsoft Компьютер в каждый дом Информация на кончиках пальцев 1995 – Важность Internet 2000 – .NET Platform 2002 – Trustworthy computing “Когда мы сталкиваемся с проблемой выбора между реализацией новой функциональной возможности и устранением уязвимости, мы должны выбирать второе”


Слайд 3

Открытые, прозрачные взаимоотношения с заказчиками Лидерство в индустрии Поддержка открытых стандартов Предсказуемая Поддерживаемая Устойчивая Восстановимая Доказанная Защищенность от атак Защита конфиден-циальности, целос-тности данных и систем Управляемая Защита от нежелательных коммуникаций Контроль за приватностью информации Продукты, онлайновые сервисы, принципы доступа


Слайд 4

“Безопасность, пожалуй, самая скучная вещь на свете. Что происходит когда система надежно защищена? Founder and CTO of WhiteHat Security, Inc. Jeremiah Grossman Что думают разработчики? www.whitehatsec.com НИЧЕГО!"


Слайд 5

Во что выливается подобное отношение Две строки кода на C в RPCSS (Blaster): while (*pwszTemp != L'\\') *pwszServerName++ = *pwszTemp++; Привели к >1,500,000 зараженных компьютеров 3,370,000 звонков в поддержку в сентябре 2003 (при обычных вирусных эпидемиях не более 350,000) ОЧЕНЬ много негативных комментариев «Это поднимет на новый уровень мысли о поиске альтернативы для продуктов Microsoft” Gartner «Определенно видны сдвиги в лучшую сторону [Безопасность Microsoft], но я не уверен, что этих сдвигов достаточно» Forrester


Слайд 6

Что было сделано Microsoft Инвестировано более $100,000,000 Обучено более 11,000 инженеров и сотрудников поддержки План по безопасности для каждого продукта Моделирование угроз Постоянный аудит кода Аудит обязательная часть при выпуске продукта


Слайд 7

Результаты! Windows 2000 vs Windows Server 2003 Office 2000 vs Office 2003 Windows XPSP1 vs Windows XPSP2 Exchange 2000 vs Exchange 2003


Слайд 8

Результаты! Снижение кол-ва уязвимостей в 2 раза ! IIS5 vs IIS6 SQL Server 2000 vs SQL Server 2000 SP3 IE6 vs IE6 SP2


Слайд 9

Результаты! 455


Слайд 10

“На самом деле мы считаем Microsoft лидером отрасли ПО из-за их улучшений в безопасной разработке” John Pescatore Vice President and Distinguished Analyst Gartner, Inc (From CRN, Feb 13th 2006) http://tinyurl.com/rezjz Результаты!


Слайд 11

“Они [Microsoft] в обязательном порядке проводят аудиты кода и тренинги по безопасности для всех разработчиков. Open Source проекты пока не могут придерживаться тех же требований. Author and enterprise systems consultant Ted Neward TheServerSide Java Symposium (March 27th 2006) Результаты!


Слайд 12

“9 из 10 web сайтов имеют как минимум 1 серьезную уязвимость! Каждый раз когда вы посещаете ваш любимый on-line магазин, проверяете состояние счета или просто разговариваете в чате существует 90% вероятность того, что сайт уже взломан!” Founder and CTO of WhiteHat Security, Inc. Jeremiah Grossman Начальная стоимость уязвимости для Microsoft – $100 000 Microsoft Security Response Center Война за безопасность - Реалии


Слайд 13

Реалии войны Дилемма атакующего и защищающегося Администратор должен помнить о всех возможных способах взлома; атакующий может выбрать самую уязвимую особенность системы Администратор защищается от известных методов взлома; атакующий пробует неизвестные Администратор всегда должен быть на чеку; атакующий может выбрать любой момент Администратор должен придерживаться правил; атакующий этого не делает


Слайд 14

Реалии войны Хакеры атакуют нерасторопных Секундомер запускается ПОСЛЕ выпуска патча “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/showArticle.jhtml?articleID=168602115 “Глубокая Защита единственный шанс защититься от раннего появления вредоносного ПО”


Слайд 15

Реалии войны Хакеры отлично вооружены Существуют инструменты, которые позволяют просто делать эксплойты Инструменты для реверс-инжиниринга Structural Comparison of Executable Objects, Halvar Flake http://www.sabre-security.com/files/dimva_paper2.pdf PCT Bug: “Обнаружение и понимание уязвимости заняло у нас менее 30 минут” H.323 ASN.1 Bug: “Общий анализ занял менее 3х часов” Exploit Payloads www.metasploit.com


Слайд 16

Цена создания атаки минимальна Цена для заказчиков огромна Разработка плана устранения. Поиск уязвимости. Устранение уязвимости. Тестирование патча. Тестирование программы установки патча. Создание и тестирование патча для разных языков. Стоимость цифрового подписывания кода (Authenticode) Публикация патча на сайт Написания сопроводительной документации Отслеживание и реакция на публикации в СМИ Стоимость трафика Стоимость рабочего времени на разработку следующей версии продукта, которое было остановлено Стоимость установки патча клиентом Стоимость потенциальной потери дохода в связи с возможным решением клиентов не пользоваться вашим продуктом Реалии войны Неравная стоимость


Слайд 17

"Если вы знаете врага и знаете себя, то можете быть спокойны, если вам предстоит сражаться даже в сотне битв. Если вы знаете самого себя, но не знаете врага, за каждую добытую вами победу вы будете расплачиваться поражением. Если вы не знаете ни самого себя, ни врага, вы будете разбиты в каждой битве" Сунь Цзы. "Искусство войны" 511 год до н.э. Как победить?


Слайд 18

Искусство войны Убедить руководство Знать методы взлома Сокращать возможность атаки Придерживаться процесса SDL Быть в курсе Учиться


Слайд 19

“В компании, в которой я работал ДО Microsoft, вопросы безопасности изредка возникали на утренних совещаниях в понедельник - после того как технический директор во время уикенда смотрел фильм из разряда "The Net”, "Sneakers" или "Hackers"" Один из сотрудников компании Microsoft Поддержка руководства Обычное отношение


Слайд 20

Поддержка руководства Важность защищенных систем Две строки кода на C в RPCSS (Blaster): while (*pwszTemp != L'\\') *pwszServerName++ = *pwszTemp++; Привели к >1,500,000 зараженных компьютеров 3,370,000 звонков в поддержку в сентябре 2003 (при обычных вирусных эпидемиях не более 350,000) ОЧЕНЬ много негативных комментариев «Это поднимет на новый уровень мысли о поиске альтернативы для продуктов Microsoft” Gartner «Определенно видны сдвиги в лучшую сторону [Безопасность Microsoft], но я не уверен, что этих сдвигов достаточно» Forrester


Слайд 21

Откуда берутся дыры в системах?


Слайд 22

Существует ТОЛЬКО два типа проблем с безопасностью ?Доверие вводу ?Все остальное!


Слайд 23

Crystal Reports Vulnerability MS04-017 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) Убиваем файл! (3) Отправляем пользователю


Слайд 24

Доверие тем, кому не надо Переполнения буферов SQL Injection Cross-Site Scripting «Все входящее плохое, пока не доказано обратное!»


Слайд 25

Переполнение стека void func(char *p, int i) { int j = 0; CFoo foo; int (*fp)(int) = &func; char b[128]; strcpy(b,p); }


Слайд 26

Переполнение стека 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 = 00401000 bar = 00401045 My stack: 00000000 00000000 7FFDF000 0012FF80 0040108A 00410EDE Hello Now stack: 6C6C6548 0000006F 7FFDF000 0012FF80 0040108A 00410EDE $arg = "ABCDEFGHIJKLMNOP". "\x45\x10\x40"; $cmd = "StackOverrun ".$arg; system($cmd); C:\>perl HackOverrun .pl foo = 00401000 bar = 00401045 My stack: 00000000 00000000 7FFDF000 0012FF80 0040108A 00410ECA ABCDEFGHIJKLMNOPE?@ Now stack: 44434241 48474645 4C4B4A49 504F4E4D 00401045 00410ECA Augh! I've been hacked!


Слайд 27

Печальный пример 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);


Слайд 28

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)


Слайд 29

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)


Слайд 30

Проблемы с канонизацией more < boot.ini equals more < boot.ini. equals more < boot.ini::$DATA Название потока Давайте рассмотрим http://www.myshop.ru/basket.aspx::$DATA


Слайд 31

Cross Site Scripting (XSS) ОЧЕНЬ частая уязвимость Ошибка в веб-сервере может привести к компрометации клиента и даже более Ошибка – доверяем вводу и повторяем его!


Слайд 32

XSS в действии – крадем Cookie Welcome.asp Hello, <%= request.querystring(?name?)%>


Слайд 33

XSS в действии – “дефейс”


Слайд 34

SQL Injection – C# string Status = "No"; string sqlstring =""; try { SqlConnection sql= new SqlConnection( @"data 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(); }


Слайд 35

Что неправильно (1 из 3)


Слайд 36

Что неправильно (2 из 3)


Слайд 37

Что неправильно(3 из 3) Ваш самый страшный кошмар!


Слайд 38

Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики


Слайд 39

Снижение вероятности атаки Анализ точек входа в ПО, а также


Слайд 40

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


Слайд 41

Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики


Слайд 42

Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики


Слайд 43

fxCop


Слайд 44

fxCop - Demo Sql Injections в действии Cross Site Scripting не пройдет fxCop на страже Собственные правила


Слайд 45

Сокращайте поверхность атак По умолчанию все выключено Используйте защищенный код Используйте инструменты Используйте лучшие практики


Слайд 46

System.Security.SecureString SecureString password = new SecureString(); ConsoleKeyInfo nextKey = Console.ReadKey(true); while(nextKey.Key != ConsoleKey.Enter) { password.AppendChar(nextKey.KeyChar); Console.Write("*"); nextKey = Console.ReadKey(true); } password.MakeReadOnly(); return password System.String использовать для хранения важной информации опасно


Слайд 47

Enterprise Library 2.0 Cryptography Application Block Security Application Block Demo Configuration Tool Quick Start for Security


Слайд 48

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 Requirements Design Implementation Verification Release Support & Servicing Proactive Security Development Lifecycle Задачи и процессы Threat Modeling


Слайд 49

Недостаток знаний deldeleteete


Слайд 50

Недостаток знаний


Слайд 51

Роль обучения Эксперимент 10 16 +45 +41 #define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\" #define MAX_RECV_MSG 256 #define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\" #define MAX_RECV_MSG 256


Слайд 52


Слайд 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

© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Слайд 58

Как работает Microsoft: Watson


Слайд 59

Еще целочисленные Internet Explorer 5.0 BMP Rendering (MS04-025) while (_bmfh.bfOffBits > (unsigned)cbRead) { BYTE abDummy[1024]; int cbSkip; cbSkip = _bmfh.bfOffBits - cbRead; if (cbSkip > 1024) cbSkip = 1024; if (!Read(abDummy, cbSkip)) goto Cleanup; cbRead += cbSkip; }


Слайд 60

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)


×

HTML:





Ссылка: