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

Содержание

Слайд 2

План

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

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

Слайд 3

Приоритеты Microsoft

Компьютер в каждый дом
Информация на кончиках пальцев
1995 – Важность Internet
2000 –

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

Слайд 4

Открытые, прозрачные взаимоотношения с заказчиками
Лидерство в индустрии
Поддержка открытых стандартов

Предсказуемая
Поддерживаемая
Устойчивая
Восстановимая
Доказанная

Защищенность от атак
Защита конфиден-циальности,

Открытые, прозрачные взаимоотношения с заказчиками Лидерство в индустрии Поддержка открытых стандартов Предсказуемая
целос-тности данных и систем
Управляемая

Защита от нежелательных коммуникаций
Контроль за приватностью информации
Продукты, онлайновые сервисы, принципы доступа

Слайд 5

“Безопасность, пожалуй, самая скучная вещь на свете. Что происходит когда система надежно

“Безопасность, пожалуй, самая скучная вещь на свете. Что происходит когда система надежно
защищена?

Founder and CTO of WhiteHat Security, Inc.
Jeremiah Grossman

Что думают разработчики?

www.whitehatsec.com

НИЧЕГО!"

Слайд 6

Во что выливается подобное отношение

Две строки кода на C в RPCSS (Blaster):
while

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

Слайд 7

Что было сделано Microsoft

Инвестировано более $100,000,000
Обучено более 11,000 инженеров и сотрудников поддержки
План

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

Слайд 8

Результаты!

Windows 2000 vs Windows Server 2003

Office 2000 vs Office 2003

Windows XPSP1 vs

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

Exchange 2000 vs Exchange 2003

Слайд 9

Результаты!

Снижение кол-ва уязвимостей в 2 раза !

IIS5 vs IIS6

SQL Server 2000 vs SQL

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

IE6 vs IE6 SP2

Слайд 10

Результаты!

455

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

Слайд 11

“На самом деле мы считаем Microsoft лидером отрасли ПО из-за их улучшений

“На самом деле мы считаем Microsoft лидером отрасли ПО из-за их улучшений
в безопасной разработке”

John Pescatore
Vice President and Distinguished Analyst
Gartner, Inc
(From CRN, Feb 13th 2006)

http://tinyurl.com/rezjz

Результаты!

Слайд 12

“Они [Microsoft] в обязательном порядке проводят аудиты кода и тренинги по безопасности

“Они [Microsoft] в обязательном порядке проводят аудиты кода и тренинги по безопасности
для всех разработчиков. Open Source проекты пока не могут придерживаться тех же требований.

Author and enterprise systems consultant Ted Neward
TheServerSide Java Symposium
(March 27th 2006)

Результаты!

Слайд 13

“9 из 10 web сайтов имеют как минимум 1 серьезную уязвимость!
Каждый раз

“9 из 10 web сайтов имеют как минимум 1 серьезную уязвимость! Каждый
когда вы посещаете ваш любимый on-line магазин, проверяете состояние счета или просто разговариваете в чате существует 90% вероятность того, что сайт уже взломан!”

Founder and CTO of WhiteHat Security, Inc.
Jeremiah Grossman

Начальная стоимость уязвимости для Microsoft – $100 000

Microsoft Security Response Center

Война за безопасность - Реалии

Слайд 14

Реалии войны Дилемма атакующего и защищающегося

Администратор должен помнить о всех возможных способах взлома;

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

Слайд 15

Реалии войны Хакеры атакуют нерасторопных

Секундомер запускается ПОСЛЕ выпуска патча
“Hackers Beating Efforts to

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

Слайд 16

Реалии войны Хакеры отлично вооружены

Существуют инструменты, которые позволяют просто делать эксплойты
Инструменты для

Реалии войны Хакеры отлично вооружены Существуют инструменты, которые позволяют просто делать эксплойты
реверс-инжиниринга
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

Слайд 17

Цена создания атаки минимальна
Цена для заказчиков огромна
Разработка плана устранения.
Поиск уязвимости.
Устранение уязвимости.
Тестирование патча.
Тестирование

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

Реалии войны Неравная стоимость

Слайд 18

"Если вы знаете врага и знаете себя, то можете быть спокойны, если

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

Сунь Цзы. "Искусство войны" 511 год до н.э.

Как победить?

Слайд 19

Искусство войны

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

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

Слайд 20

“В компании, в которой я работал ДО Microsoft, вопросы безопасности изредка возникали

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

Один из сотрудников компании Microsoft

Поддержка руководства Обычное отношение

Слайд 21

Поддержка руководства Важность защищенных систем

Две строки кода на C в RPCSS (Blaster):
while (*pwszTemp

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

Слайд 22

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

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

Слайд 23

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

①Доверие вводу

②Все остальное!

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

Слайд 24

Crystal Reports Vulnerability MS04-017

public class CrystalImageHandler : WebControl {
private string tmpdir =

Crystal Reports Vulnerability MS04-017 public class CrystalImageHandler : WebControl { private string
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) Отправляем пользователю

Слайд 25

Доверие тем, кому не надо

Переполнения буферов
SQL Injection
Cross-Site Scripting

«Все входящее плохое, пока не

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

Слайд 26

Переполнение стека

void func(char *p, int i) {
int j = 0;
CFoo

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

Слайд 27

Переполнение стека

void foo(const char* input)
{
char buf[10];
printf("My stack:\n%p…");
printf("%s\n", buf);
printf("Now

Переполнение стека void foo(const char* input) { char buf[10]; printf("My stack:\n%p…"); printf("%s\n",
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!

Слайд 28

Печальный пример SQL Server Instance Resolution (MS02-039)

#define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"
#define MAX_RECV_MSG 256
void

Печальный пример SQL Server Instance Resolution (MS02-039) #define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"
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);

Слайд 29

error_status_t _RemoteActivation(..., WCHAR *pwszObjectName, ... ) { *phr = GetServerPath( pwszObjectName, &pwszObjectName);

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)

Слайд 30

SMFRESULT FNLOCAL smfBuildFileIndex(PSMF BSTACK *ppsmf) {
WORD wMemory;
wMemory = sizeof(SMF) +

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)

Слайд 31

Проблемы с канонизацией

more < boot.ini
equals
more < boot.ini.
equals
more < boot.ini::$DATA

Название потока

Давайте рассмотрим http://www.myshop.ru/basket.aspx::$DATA

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

Слайд 32

Cross Site Scripting (XSS)

ОЧЕНЬ частая уязвимость
Ошибка в веб-сервере может привести к компрометации

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

Слайд 33

XSS в действии – крадем Cookie

Welcome.asp
Hello, <%= request.querystring(′name′)%>

XSS в действии – крадем Cookie Welcome.asp Hello,

Слайд 34

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

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

Слайд 35

SQL Injection – C#

string Status = "No";
string sqlstring ="";
try {
SqlConnection sql=

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

Слайд 36

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

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

Слайд 37

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

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

Слайд 38

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

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

Слайд 39

Сокращайте поверхность атак

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

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

Слайд 40

Снижение вероятности атаки

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

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

Слайд 41

Примеры

Windows XP SP2
Authenticated RPC
Firewall по умолчанию
IIS6
Выключен!
Network service
Только статика

SQL Server 2005
xp_cmdshell выключен
CLR и

Примеры Windows XP SP2 Authenticated RPC Firewall по умолчанию IIS6 Выключен! Network
COM выключен
Network service
Visual Studio 2005
Web server только для localhost
SQL Server Express только для localhost

Слайд 42

Сокращайте поверхность атак

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

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

Слайд 43

Сокращайте поверхность атак

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

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

Слайд 45

fxCop - Demo

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

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

Слайд 46

Сокращайте поверхность атак

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

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

Слайд 47

System.Security.SecureString


SecureString password = new SecureString();
ConsoleKeyInfo nextKey = Console.ReadKey(true);
while(nextKey.Key != ConsoleKey.Enter)
{
password.AppendChar(nextKey.KeyChar);

System.Security.SecureString SecureString password = new SecureString(); ConsoleKeyInfo nextKey = Console.ReadKey(true); while(nextKey.Key !=
Console.Write("*");
nextKey = Console.ReadKey(true);
}
password.MakeReadOnly();
return password

System.String использовать для хранения важной информации опасно

Слайд 48

Enterprise Library 2.0

Cryptography Application Block
Security Application Block
Demo
Configuration Tool
Quick Start for Security

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

Слайд 49

Security Training

Security Kickoff & Register with SWI

Security Design Best Practices

Security Arch & Attack Surface Review

Use Security Development

Security Training Security Kickoff & Register with SWI Security Design Best Practices
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

Слайд 50

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

deldeleteete

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

Слайд 51

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

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

Слайд 52

Роль обучения Эксперимент

10
16

+45
+41

#define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"
#define MAX_RECV_MSG 256

#define INSTREGKEY "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"
#define

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

Слайд 54

Samara .NET User Group

http://samara.gotdotnet.ru
> 100 участников
18 встреч, 2 встречи каждый месяц
>30 докладов

Samara .NET User Group http://samara.gotdotnet.ru > 100 участников 18 встреч, 2 встречи
на разные темы
Книги
Защита ваших проектов
Призы
ОБЩЕНИЕ

Слайд 55

Ресурсы
Описание Security Development Lifecycle http://msdn.microsoft.com/security/sdl
Блог Michael Howard http://blogs.msdn.com/michael_howard/

Ресурсы Описание Security Development Lifecycle http://msdn.microsoft.com/security/sdl Блог Michael Howard http://blogs.msdn.com/michael_howard/

Слайд 56

Заключение

Безопасность это очень важно, потому что может быть очень накладно
Нужно:
Убедить руководство
Знать методы

Заключение Безопасность это очень важно, потому что может быть очень накладно Нужно:
взлома
Сокращать возможность атаки
Придерживаться процесса SDL
Быть в курсе
Общаться – UG ждет тебя!

Слайд 57

Вопросы?

Сергей Поляков
alexei@samara.net

Вопросы? Сергей Поляков alexei@samara.net

Слайд 58

© 2005 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes

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

Слайд 59

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

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

Слайд 60

Еще целочисленные Internet Explorer 5.0 BMP Rendering (MS04-025)

while (_bmfh.bfOffBits > (unsigned)cbRead) { BYTE

Еще целочисленные Internet Explorer 5.0 BMP Rendering (MS04-025) while (_bmfh.bfOffBits > (unsigned)cbRead)
abDummy[1024]; int cbSkip;
cbSkip = _bmfh.bfOffBits - cbRead;
if (cbSkip > 1024) cbSkip = 1024;
if (!Read(abDummy, cbSkip)) goto Cleanup;
cbRead += cbSkip; }
Имя файла: Безопасность-для-программиста-–все-что-нужно-знать.pptx
Количество просмотров: 102
Количество скачиваний: 0