25 bīstamākās programmēšanas kļūdas

Taisni kā saklausījušies Latvijas neseno hītu par VID datu noplūdi, par ko pirmais publiski ziņoja De facto pēdējās svētdienas raidījumā

un tālāk aprunāja kaut vai Domburs savā Kas notiek Latvijā un arī savā vietnē publicēja interviju ar datu ņēmēju vadoni Neo, kurā viņš diezgan sīki apraksta gan paņemto, gan pašu “caurumu”, MITRE ir publicējuši 25 visbīstamākās 2010 gada programmēšanas kļūdas. Godpilnajā otrajā vietā ir SQL injekcijas, par kuram jau reiz rakstīju, bet, protams, arī tālākajā sarakstā ir vesels bars ar kļūdām, kuras iespējams pielaist arī darbā ar datu bāzēm. Tā kā labāk vēlu nekā nekad, tad pat, ja līdz šim neesat drošības aspektam pievērsuši īpašu uzmanību, varat to darīt tagad un paskatīties, vai jūs nemēdzat pielaist pašas izplatītākās kļūdas.

Runājot par drošību vajadzētu atcerēties, ka ar to ir vairākas saistītas lietas – drošības ievērošana nav tikai nodrošināšanās pret neautorizētām izmaiņām vai datu nozagšanu. Drošība (precīzāk jau laikam būtu tomēr teikt pieejamība – availability) nozīmē arī, piemēram, sistēmas aizsargāšanu pret to, ka kāds jauši vai nejauši ievada jūsu sistēmā noteiktus datus un tā apstrādā tikai tos un nedod vairs atbildi vispār (vai saprātīgā laikā) uz citiem pieprasījumiem. Nu piemēram, jūs ļaujat ievadīt meklēšanas laukā jebkuru simbolu virkni un meklējat visā datubāzē (nu labi tehniski kādā(-s) noteiktā(-s) tabulās) ievadīto simbolu virkni, ieskaitot maskas. Tad, atnāk pie jums kāds parasts cilvēks, kuram nepieciešams risināt krustvārdu mīklas, viņam jāatrod vārds ar trīs A burtiem un ievada jūsu sistēmā masku __A_A_A. Tā rezultātā jūsu mega tabula tiek skanēta visa cauri un pēc dažiem šādiem jokdariem var gadīties, ka neviens cits šai sistēmā pastrādāt nevar, jo visi sistēmas resursi ir novirzīti krustvārdu mīklu risināšanai. OK es pieņemu, ka kāds bars no Jums teiks (vai vismaz padomās) – kādus sviestu viņš lej, kādas krustvārdu mīklas? :O Labi liekam pie malas krustvārdu mīklas, bet cik reizes jums nav bijušas klientu vēlmes meklēt tekstos pēc patvaļīgas apakšvirknes, kas pēc būtības ir tā pati krustvārdu mīkla? Nesaprātīgi realizējot šo prasību pastāv lielas iespējas, ka daži pieprasījumi spēj pilnībā paralizēt visu jūsu datu bāzi. Vai arī līdzīga problēma – neierobežot atgriezto datu daudzumu.

Ok tagad pie lietas, kas tad ir šīs 25 lielākās problēmas? Es atļāvos tās cik nu bija manos spēkos pārtulkot un uzskaitīt zemāk. Oriģinālajā rakstā īsumā arī pastāstīts, ko katra no tām nozīmē un kā no tās izvairīties. Pie dažiem esmu arī pierakstījis šādus tādus komentārus.

  1. Sveša skripta iemānīšana lietotājam (Cross Site Scripting).
  2. SQL komandas nepietiekama pārbaude jeb SQL injekcija (SQL Injection). Pilnā mērā attiecas uz datubāzēm, ko sīkāk aprakstīju šeit.
  3. Bufera pārpilde (Classic Buffer Overflow).
  4. Starpvietņu pieprasījumu viltošana (Cross-Site Request Forgery, CSRF).
  5. Nepietiekama pieejas kontrole (Authorization). Viena no tradicionālajām kļūdām Oracle DBVS – tiesību piešķiršana visiem – GRANT <tiesība> ON <objekts> TO PUBLIC.
  6. Drošības lēmuma pieņemšana balstoties uz neuzticamiem datiem (Reliance on Untrusted Inputs in a Security Decision).
  7. Nepietiekami ierobežota piekļuve aizsargātai mapei (Path Traversal).
  8. Neierobežotas iespējas augšuplādēt bīstama veida datni (Unrestricted Upload of File with Dangerous Type).
  9. Operētājsistēmas komandas nepietiekama pārbaude (OS Command Injection).
  10. Sensitīvu datu sūtīšana atklātā tekstā (Missing Encryption of Sensitive Data).
  11. Iekodētu autorizācijas rekvizītu lietošana (Use of Hard-coded Credentials).
  12. Bufera pieeja nekorektā izmērā (Buffer Access with Incorrect Length Value).
  13. Nepilnīga datņu nosaukumu kontrole PHP Include/Require komandās (PHP File Inclusion).
  14. Masīva indeksa nepietiekama pārbaude (Improper Validation of Array Index).
  15. Neparastu vai izņēmuma gadījumu nepietiekama apstrāde (Improper Check for Unusual or Exceptional Conditions).
  16. Informācijas atklāšana kļūdas ziņojumā (Information Exposure Through an Error Message). Es par šo rakstīju un devu piemērus gadījumiem, kad tiek izmantoti skatījumi, kurā lietotājs drīkst redzēt tikai tam vien piederošu informāciju, taču pielietojot nekorektus datus var iegūt vairāk informācijas nekā būtu pieļaujams.
  17. Skaitliskās vērtības pārpildīšanās vai zīmes maiņa (Integer Overflow or Wraparound)
  18. Nekorekta bufera izmēra aprēķināšana (Incorrect Calculation of Buffer Size)
  19. Autentifikācijas trūkums kritiskai funkcijai (Missing Authentication for Critical Function)
  20. Koda lejuplāde bez integritātes pārbaudes (Download of Code Without Integrity Check)
  21. Kritiska resursa (piemēram konfigurācijas datnes) nepilnīga pieejas kontrole (Incorrect Permission Assignment for Critical Resource)
  22. Nepilnīga resursu kontrole un piešķiršana bez ierobežojumiem (Allocation of Resources Without Limits or Throttling)
  23. URL pārsūtīšana neuzticamai vietnei (Open Redirect)
  24. Novecojuša vai viegli uzlaužama kriptēšanas algoritma lietošana (Use of a Broken or Risky Cryptographic Algorithm)
  25. Privāta resursa pieejamība no vairākām vietām/procesiem (Race Condition)

Turpmākā lasāmviela

  • php.lv tēma ar saitēm par php un web aplikāciju drošību;
  • LU pasniedzēja Kriša Rauhvargera lekcija Tīmekļa aplikāciju drošība Tīmekļa tehnoloģiju priekšmetā. Prezentācija pieejama kā viesim. Interesanti, ka VIDā pieļautais caurums minēts arī šajā prezentācijā kā “Nepilnīga URL adrešu aizsardzība – lapas, kas pieejamas autentificētiem lietotājiem, pieejamas visiem.” Varētu teikt – to pat skolā māca, ka tā darīt nevajag😉

2 Responses to 25 bīstamākās programmēšanas kļūdas

  1. Raimonds says:

    Attiecībā par web aplikāciju biežākajām drošības problēmām rekomendēju OWASP Top Ten Project – tur ir prezentācijas / dokumenti ar labiem paskaidrojumiem un piemēriem, kas katra problēma ir un kā to novērst.

  2. Reinis says:

    Lasot šo jāsāk domāt,cik droša būs mana mājaslapa.

Komentēt

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Mainīt )

Twitter picture

You are commenting using your Twitter account. Log Out / Mainīt )

Facebook photo

You are commenting using your Facebook account. Log Out / Mainīt )

Google+ photo

You are commenting using your Google+ account. Log Out / Mainīt )

Connecting to %s

%d bloggers like this: