18
Безопасное программирование на C#: битва с пятью уязвимостями Стефанцов Д. А. [email protected]

Безопасное программирование на C#

Embed Size (px)

Citation preview

Page 1: Безопасное программирование на C#

Безопасное программирование на C#:

битва с пятью уязвимостямиСтефанцов Д. А.

[email protected]

Page 2: Безопасное программирование на C#

Коротко о главном

• CIA (Confidentiality, Integrity, Availability)• STRIDE (Spoofing, Tampering, Repudiation, Information Disclosure,

Denial of service, Elevation of Privilege)• OWASP Top 10 (Injection, Broken Authentication and Session

Management, XSS, Insecure Direct Object References, Security Misconfiguration, Sensitive Data Exposure, Missing Function Level Access Control, CSRF, Using Components with Known Vulnerabilities, Unvalidated Redirects and Forwards)

Page 3: Безопасное программирование на C#

Problem Developer

unsafe void haha(string s){ char* p = stackalloc char[10]; for (int i = 0; i < s.Length; ++i) { *p++ = s[i]; }}

Page 4: Безопасное программирование на C#

Безразличие разработчика

• Чем опасен незащищённый код?• Существует ли абсолютная защита и, если нет, зачем пытаться что-

то защищать?• Может ли компьютерная безопасность быть интересной?

Page 5: Безопасное программирование на C#

Чем опасен незащищённый код?

• Апрель 2012, данные ASafaWeb: 67,37% приложений имеют серьёзные уязвимости конфигурации• http://www.troyhunt.com/2012/04/67-of-aspnet-websites-have-serious.html• https://asafaweb.com/

• Июнь 2014, > 300k систем всё ещё уязвимы к Heartbleed• http://

www.theguardian.com/technology/2014/jun/23/heartbleed-attacks-vulnerable-openssl

Page 6: Безопасное программирование на C#

Существует ли абсолютная защита и, если нет, зачем пытаться что-то защищать?

• “There's no such thing as absolute security…”• https://

www.schneier.com/essays/archives/2008/01/the_psychology_of_se.html

• “Why the Human Brain Is a Poor Judge of Risk”• https://

www.schneier.com/essays/archives/2007/03/why_the_human_brain.html

• “The Importance of Security Engineering”• https://

www.schneier.com/essays/archives/2012/09/the_importance_of_se.html

Page 7: Безопасное программирование на C#

Может ли компьютерная безопасность быть интересной?

• IBM Black Team• http://blog.goyello.com/2010/03/12/a-legend-of-the-notorious-black-team/• http://www.t3.org/tangledwebs/07/tw0706.html#• http://www.penzba.co.uk/GreybeardStories/TheBlackTeam.html

• Elevation of Privilege Card Game• http://www.microsoft.com/security/sdl/adopt/eop.aspx

Page 8: Безопасное программирование на C#

Problem Developer

bool haha2(string s){ Regex regex = new Regex(@"^(\d+|\s+)*$"); Match match = regex.Match(s); return match.Success;}

Page 9: Безопасное программирование на C#

Лень разработчика

• Когда лень разрушает, а когда защищает ваши программы?• http://youtu.be/eL5o4PFuxTY• https://msdn.microsoft.com/en-us/library/ff649458.aspx• http://www.microsoft.com/en-us/download/details.aspx?id=42518

• Что лучше положить подальше, чтобы потом взять поближе?

Page 10: Безопасное программирование на C#

Problem Developer

using System;

class Program { class MyClass: IDisposable { public void Dispose() { // ... } } static void Main() { IDisposable d = new MyClass(); }}

Page 11: Безопасное программирование на C#

Отсутствие знаний у разработчика• Что необходимо знать, чтобы писать защищённые программы?• Какие периодические источники следует добавить в ридер?

Page 12: Безопасное программирование на C#

Что необходимо знать, чтобы писать защищённые программы?• Adam Shostack Threat Modeling: Designing for Security• http://blogs.msdn.com/b/alikl/archive/2009/03/19/asp-net-security-a

rchitecture-cheat-sheet-for-very-busy-architects.aspx• http://

www.troyhunt.com/2011/12/free-ebook-owasp-top-10-for-net.html

Page 13: Безопасное программирование на C#

Какие периодические источники следует добавить в ридер?• https://technet.microsoft.com/en-us/security/advisory• https://technet.microsoft.com/en-us/security/bulletin• http://www.troyhunt.com• http://krebsonsecurity.com/• http://blog.cryptographyengineering.com/• https://www.schneier.com/• http://devteev.blogspot.ru/• https://andrepetukhov.wordpress.com/• …

Page 14: Безопасное программирование на C#

Problem Developer

int CalculateBufferSize(int ElementSize, int ElementsNumber){ return ElementSize * ElementsNumber;}

Page 15: Безопасное программирование на C#

Бюджет и сроки проекта

• Когда защита становиться дороже ущерба?• “Security ROI” https://

www.schneier.com/blog/archives/2008/09/security_roi_1.html

• Когда без защиты не обойтись?

Page 16: Безопасное программирование на C#

Problem Developer

Monitor.Enter (locker);try{ // ...}finally { Monitor.Exit (locker); }

Page 17: Безопасное программирование на C#

Конечные пользователи

• Зачем всё это, если пользователи напишут пароль на стикере у монитора?• Безопасность по умолчанию и безопасность по незнанию – это

одно и то же?