Как стать автором
Обновить

ТОП 25 самых опасных ошибок программирования

Время на прочтение 3 мин
Количество просмотров 5.1K
UPD: Ночным молчаливым минусовщикам — пламенный привет! =)

"Ох уж эти ТОПы..." — наверное, подумали вы. Но в данном случае за дело взялись специалисты по информационной безопасности со всего мира — и взялись серьезно. Так что если вы так или иначе участвуете в разработке ПО, нелишне будет узнать, какие принципиальные ошибки чаще всего допускаются при написании кода и проектировании.

12 января на сайте The MITRE Corporation был опубликован документ под названием 2009 CWE/SANS Top 25 Most Dangerous Programming Errors. Это плод совместной деятельности весьма крупных организаций — института SANS (расшифровывается как SysAdmin, Audit, Network, Security) и корпорации MITRE. Как всегда бывает с проектами, которые получают гос. поддержку США, все делается очень основательно.

Вот мой вольный перевод вступления к этому документу:
«Топ 25 самых опасных ошибок программирования» — это список самых опасных ошибок программирования, которые могут привести к серьезным уязвимостям в программном обеспечении. Они нередки, их легко найти и ими легко воспользоваться. Они опасны, потому что зачастую позволяют злоумышленнику полностью взять под контроль программу, украсть данные или вообще не дать программе функционировать.
Этот список — результат сотрудничества между SANS Institute, MITRE и многих экспертов по информационной безопасности в США и Европе. Список использует опыт, полученный при составлении «Top 20 attack vectors» институтом SANS и «Common Weakness Enumeration (CWE)» корпорацией MITRE. MITRE поддерживает сайт, посвященный CWE, при поддержке US Department of Homeland Security's National Cyber Security Division (это я переводить не возьмусь), предоставляющий детальные описания 25-ти главных ошибок программирования вместе с авторитетными рекомендациями, как их смягчить и избежать. Сайт CWE также содержит данные по более чем 700 другим ошибкам программирования, проектирования и архитектуры, которые могут привести к уязвимостям.
Основная цель этого списка — устранить уязвимости прямо в зародыше, обучая программистов тому, как исключать наиболее общие ошибки еще до того, как ПО выпускается. Список будет средством для обучения и осведомления, которое поможет программистам предотвратить те виды уязвимостей, которыми поражена индустрия разработки ПО. Потребители ПО могут пользоваться тем же списком, чтобы предъявлять более высокие требования к безопасности ПО. Наконец, менеджеры проектов и CIO (Chief Information Officer) могут использовать данный ТОП 25 для измерения успехов в обеспечении безопасности своих программ.


Собственно, список ошибок я лучше приведу без перевода:

Insecure Interaction Between Components


These weaknesses are related to insecure ways in which data is sent and received between separate components, modules, programs, processes, threads, or systems.

* CWE-20: Improper Input Validation
* CWE-116: Improper Encoding or Escaping of Output
* CWE-89: Failure to Preserve SQL Query Structure (aka 'SQL Injection')
* CWE-79: Failure to Preserve Web Page Structure (aka 'Cross-site Scripting')
* CWE-78: Failure to Preserve OS Command Structure (aka 'OS Command Injection')
* CWE-319: Cleartext Transmission of Sensitive Information
* CWE-352: Cross-Site Request Forgery (CSRF)
* CWE-362: Race Condition
* CWE-209: Error Message Information Leak

Risky Resource Management


The weaknesses in this category are related to ways in which software does not properly manage the creation, usage, transfer, or destruction of important system resources.

* CWE-119: Failure to Constrain Operations within the Bounds of a Memory Buffer
* CWE-642: External Control of Critical State Data
* CWE-73: External Control of File Name or Path
* CWE-426: Untrusted Search Path
* CWE-94: Failure to Control Generation of Code (aka 'Code Injection')
* CWE-494: Download of Code Without Integrity Check
* CWE-404: Improper Resource Shutdown or Release
* CWE-665: Improper Initialization
* CWE-682: Incorrect Calculation

Porous Defenses


The weaknesses in this category are related to defensive techniques that are often misused, abused, or just plain ignored.

* CWE-285: Improper Access Control (Authorization)
* CWE-327: Use of a Broken or Risky Cryptographic Algorithm
* CWE-259: Hard-Coded Password
* CWE-732: Insecure Permission Assignment for Critical Resource
* CWE-330: Use of Insufficiently Random Values
* CWE-250: Execution with Unnecessary Privileges
* CWE-602: Client-Side Enforcement of Server-Side Security

Тем, кто дружит с английским, очень рекомендую почитать список в оригинале, потому что там есть ценные советы, как всех этих ошибок избежать. Но даже простая медитация над этим постом значительно повысит безопасность вашего кода и, возможно, ваша программа даже сможет успешно завершить бесконечный цикл. Дважды.
Теги:
Хабы:
-8
Комментарии 19
Комментарии Комментарии 19

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн