SANS: ennesima (purtroppo) classificazione degli errori di programmazione sicura

SANS ha stilato l'ennesima classificazione dei più comuni errori di programmazione che hanno impatto sulla sicurezza del software:

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

Niente da dire su SANS, ma mi chiedo quanto sia sensato fare una classificazione che contiene 25 elementi. Qual'è lo scopo di tale classificazione?

Se è quello di fornire agli sviluppatori una utile lista per evitare di implementare tali errori, allora mi sembra che solo il numero degli elementi, astraendo dal contenuto, sia un fattore che limita enormemente l'uso di tale lista. 

E forse non sbaglio, perché nella pagina Web dedicata alla lista SANS afferma:

The main goal for the Top 25 list is to stop vulnerabilities at the source by educating programmers on how to eliminate all-too-common mistakes before software is even shipped. The list will be a tool for education and awareness that will help programmers to prevent the kinds of vulnerabilities that plague the software industry. Software consumers could use the same list to help them to ask for more secure software. Finally, software managers and CIOs can use the Top 25 list as a measuring stick of progress in their efforts to secure their software.


Ogni sviluppatore (e parlando di sviluppatori ci riferiamo a quelle figure professionali che non codificano solo in linguaggio di programmazione ma che effettuano anche l'analisi) quando si trova a dover implementare un codice deve occuparsi rispettivamente dei seguenti aspetti:

  1. algoritmi e flusso logico
  2. correttezza
  3. efficienza
  4. documentabilità
  5. sicurezza

L'ordine non è casuale.  La sicurezza del software, sebbene sia per noi del settore estremamente importante, è comunque l'ultimo punto per uno sviluppatore normale e per la normalità delle aziende che sviluppano software. 
Si deve quindi fornire agli sviluppatori una classificazione degli errori di programmazione sicura che sia facilmente memorizzabile e quindi assimilabile. Altrimenti si è già perso in partenza!

Non a caso la classificazione degli errori di sicurezza del software che reputo ancora imbattuta, ovvero la Seven pernicious kingdom, individua sole sette classi di appartenenza degli errori che possono essere facilmente memorizzate e quindi meglio assimilate. 
Il numero 7 non è affatto casuale e l'autore (Gary McGraw) di questa classificazione (che in realtà è una tassonomia) motiva il numero 7 facendo riferimento alle scienze cognitive e a quanto questo numero sia adatto per la memorizzazione umana (Seven plus or minus two).

Si sentiva la necessità di un'altra classificazione? Sinceramente no, ma evidentemente poiché la software security va tanto di moda ognuno vuole dire la sua. Ma almeno cominciate dal numero!

Anche Gary non ha avuto parole tenere con questa ultima trovata di SANS.

Commenti

Post popolari in questo blog

Exploit: icsploit o espluà?

TrueCrypt 5.0: nuova release

ING Direct: ancora con il PAD numerico rotante!