Biztonságos programozás Alapfogalmak



Hasonló dokumentumok
OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

Bevezetés Alapfogalmak Jog

Fogalomtár Etikus hackelés tárgyban Azonosító: S2_Fogalomtar_v1 Silent Signal Kft. Web:

Web service fenyegetések e- közigazgatási. IT biztonsági tanácsadó

1. Bevezető. 2. Sérülékenységek

(appended picture) hát azért, mert a rendszerek sosem

Nyílt forráskódú irodai programkomponensek vállalati környezetbe való integrációjának vizsgálata és implementációja

Írásjogtól Rootig AIX-on

Név: Neptun kód: Pontszám:

Verifikáció és validáció Általános bevezető

Operációs rendszerek. A védelem célja. A fenyegetés forrásai. Védelmi tartományok. Belső biztonság. Tartalom

Megbízhatóság az informatikai rendszerekben

UNIX: folyamatok kommunikációja

3/2010. sz. Gazdasági Főigazgatói Utasítás a PTE rendszereihez az egyetem külső partnerei részére adott távoli hozzáférések szabályozásáról

G Data MasterAdmin 9 0 _ 09 _ _ # r_ e p a P ch e T 1

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek.

Az operációs rendszer. Az operációs rendszer feladatai, részei, fajtái Az operációs rendszer beállítása

Silent Signal Kft. Webáruházak informatikai biztonsága Veres-Szentkirályi András Marketingtorta - 4 1

Jogosultságkezelés felhasználói leírás

Végfelhasználói licencszerződés

INFORMATIKA EGYRE NAGYOBB SZEREPE A KÖNYVELÉSBEN

hardver-szoftver integrált rendszer, amely Xwindow alapú terminálokat szervez egy hálózatba

A JGrid rendszer biztonsági architektúrája. Magyaródi Márk Juhász Zoltán Veszprémi Egyetem

A DFL SYSTEMS KFT. INFORMATIKAI BIZTONSÁGI SZABÁLYZATA

Alkalmazás technológiai frissítés migrációs és üzemeltetési tapasztalatok

Orvosi készülékekben használható modern fejlesztési technológiák lehetőségeinek vizsgálata

Rendszám felismerő rendszer általános működési leírás

30 MB INFORMATIKAI PROJEKTELLENŐR

Technológia az adatszivárgás ellen

S, mint secure. Nagy Attila Gábor Wildom Kft.

Programtervezés. Dr. Iványi Péter

Biztonsági folyamatirányító. rendszerek szoftvere

Microsoft SQL Server telepítése

Alapfogalmak. Biztonság. Biztonsági támadások Biztonsági célok

ALKALMAZÁSOK ISMERTETÉSE

Telenor Magyarország MS Office 365 telepítési útmutató

ELEKTRONIKUS MUNKABÉRJEGYZÉK MODUL

Vonalkód olvasó rendszer. Specifikáció Vonalkód olvasó rendszer SoftMaster Kft. [1]

DW 9. előadás DW tervezése, DW-projekt

MŰSZAKI KÖVETELMÉNYEK, A KÖRKERESŐ SZOFTVER SPECIFIKÁCIÓJA, KÖLTSÉGVETÉS. A) Műszaki követelmények

CCS Hungary, 2000 szeptember. Handling rendszer technikai specifikáció

Csoportos üzenetszórás optimalizálása klaszter rendszerekben

Adatbázis kezelő szoftverek biztonsága. Vasi Sándor G-3S

Programzás I gyakorlat

LHSimulations EULA (End-user Licence Agreement) Végfelhasználói licenc megállapodás

OE-NIK 2010/11 ősz OE-NIK ősz

Operációs rendszerek. A Windows NT felépítése

AUTOMATED FARE COLLECTION (AFC) RENDSZEREK

Fábián Zoltán Hálózatok elmélet

Rendszerkezelési útmutató

ROBOTHADVISELÉS S 2010

TANÚSÍTVÁNY. tanúsítja, hogy a E-Group Magyarország Rt. által kifejlesztett és forgalmazott. Signed Document expert (SDX) Professional 1.

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Crossplatform mobil fejlesztőkörnyezet kiválasztását támogató kutatás

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Szakdolgozati, TDK témajavaslatok

Személyes adatok védelmi alapelvei

Dr. Mileff Péter

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus

KELER KID Internetwork System (KIS)

Bankkártya elfogadás a kereskedelmi POS terminálokon

BMD Rendszerkövetelmények

Adatbázis rendszerek. dr. Siki Zoltán

Dr. Schuster György október 30.

Bizalom, biztonság és a szabad szoftverek. Mátó Péter kurátor fsf.hu alapíttvány

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Nyilvántartási Rendszer

Közbeszerzési rendszerek Informatikai Biztonsági Szabályzata

BIM RENDSZER KIALAKÍTÁSA A KORMÁNYABLAK PROJEKT LEBONYOLÍTÁSÁBAN

5.1 Környezet Hálózati topológia

ADATBÁZISOK ADATBÁZIS-KEZELŐ RENDSZEREK. Debrenti Attila

iseries Client Access Express - Mielőtt elkezdi

A tételhez segédeszköz nem használható.

Szekvencia diagram. Szekvencia diagram Dr. Mileff Péter

S01-7 Komponens alapú szoftverfejlesztés 1

Operációs rendszerek. Az X Window rendszer

Szolgáltatási szint megállapodás

Technikai tudnivalók a Saxo Trader Letöltéséhez tűzfalon vagy proxy szerveren keresztül

Kommunikáció. 3. előadás

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

Rekurzió. Dr. Iványi Péter

Felhasználók hitelesítése adatbiztonság szállításkor. Felhasználóknak szeparálása

Bevezetés. Dr. Iványi Péter

Alkalmazások típusai Szoftverismeretek

E mail titkosítás az üzleti életben ma már követelmény! Ön szerint ki tudja elolvasni bizalmas leveleinket?

Számítógépes Hálózatok. 5. gyakorlat

Muha Lajos: Informatikai biztonság

Informatikai Biztonsági szabályzata

Sérülékenység kezelés. Komli József project manager PTA CERT-Hungary Központ

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

A TESZTELÉS ALAPJAI MIÉRT SZÜKSÉGES A TESZTELÉS? MI A TESZTELÉS? ÁLTALÁNOS TESZTELÉSI ALAPELVEK

TANÚSÍTVÁNY. tanúsítja, hogy az. InfoScope Kft. által kifejlesztett. Attribútum tanúsítványok érvényességét ellenőrző SDK InfoSigno AC SDK v1.0.0.

Programozás I. gyakorlat

Adott egy szervezet, és annak ügyfelei. Nevezzük a szervezetet bank -nak. Az ügyfelek az Interneten keresztül érzékeny információkat, utasításokat

Tarantella Secure Global Desktop Enterprise Edition

Bejelentkezés az egyetemi hálózatba és a számítógépre

Átírás:

Biztonságos programozás Alapfogalmak Izsó Tamás 2015. október 1. Izsó Tamás Biztonságos programozás Alapfogalmak / 1

Bemutatkozás Izsó Tamás BME Villamosmérnöki és Informatikai Kar Hálózati Rendszerek és Szolgáltatások Tanszék honlap: www.hit.bme.hu/ izso email: izso@hit.bme.hu szoba: IB124 Tel: 06 1 463 3277 Izsó Tamás Biztonságos programozás Alapfogalmak / 2

Milyen tantárgyakat érint 1 Programozás alapjai I. II. 2 Számítógép-architektúrák 3 Gépi nyelvek 4 Operációs rendszerek 5 Assembly programozás 6 stb. Izsó Tamás Biztonságos programozás Alapfogalmak / 3

Biztonsági kockázat A kockázat csökkentése érdekében: meg kell tanulnunk milyen biztonsági fenyegetések vannak; meg kell tanulnunk, hogy fejlesztés alatt milyen sebezhetőségeket hozhatunk létre; ismernünk kell, hogy hogyan csökkenthetjük, vagy blokkolhatjuk a fenyegetéseket. Izsó Tamás Biztonságos programozás Alapfogalmak / 4

Program sebezhetőség Any sufficiently advanced technology is indistinguishable from magic. Artur C. Clarke Definíció (Sebezhetőség) A biztonsági rések lehetőséget adnak a hekkereknek, hogy a programok ne a tervezett módon viselkedjenek, így lehetőségük nyílik rosszindulatú támadás véghezvitelére; érzékeny információt megváltoztatására, törlésére vagy megszerezésére; a számítógéprendszer felett az irányítás átvételére. Izsó Tamás Biztonságos programozás Alapfogalmak / 5

Első "hacker" Illusztráció! Izsó Tamás Biztonságos programozás Alapfogalmak / 6

Ken Thompson Illusztráció! Főbb munkássága: B Programming Language (Később Dennis Ritchie ez alapján készítette a C-t) UNIX Plan 9 reguláris kifejezések elterjesztése Számítógépes sakk algoritmus (végjáték) Rob Pike-vel UTF-8 kódolás (változó hosszúságú) 1983: Turing Award (Dennis Ritchie-vel) a UNIX operációs rendszerért 1999: US National Medal of Technology 1999: First IEEE Tsutomu Kanai Award Izsó Tamás Biztonságos programozás Alapfogalmak / 7

Analógia Illusztráció! char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);} Output: Izsó Tamás Biztonságos programozás Alapfogalmak / 8

Analógia Illusztráció! char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);} Output: char f= Izsó Tamás Biztonságos programozás Alapfogalmak / 8

Analógia Illusztráció! char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);} Output: char f=" Izsó Tamás Biztonságos programozás Alapfogalmak / 8

Analógia Illusztráció! char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);} Output: char f="char f=%c%s%c;main() {printf(f,34,f,34,10);}%c Izsó Tamás Biztonságos programozás Alapfogalmak / 8

Analógia Illusztráció! char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);} Output: char f="char f=%c%s%c;main() {printf(f,34,f,34,10);}%c" Izsó Tamás Biztonságos programozás Alapfogalmak / 8

Analógia Illusztráció! char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);} Output: char f="char f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){ printf ( f,34, f,34,10);} Izsó Tamás Biztonságos programozás Alapfogalmak / 8

Analógia Illusztráció! char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);} Output: char f="char f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){ printf ( f,34, f,34,10);} Izsó Tamás Biztonságos programozás Alapfogalmak / 8

C fordító Illusztráció! A C (cc, gcc, cl) fordítót C-ben írták. Speciális karaktereket csak úgynevezett escape sequence segítségével írhatunk le. Például \ n, \\. c = next ( ) ; i f ( c!= \ \ ) return c ; c = next ( ) ; i f ( c == \ \ ) return \ \ ; i f ( c == n ) return \ n... Izsó Tamás Biztonságos programozás Alapfogalmak / 9

C fordító Adjunk hozzá új escape sequence-t. A C (cc, gcc, cl) fordítót C-ben írták. A \ v -t még nem ismeri a régi verziójú fordító, ezért fordítása hiba lesz. c = next ( ) ; i f ( c!= \ \ ) return c ; c = next ( ) ; i f ( c == \ \ ) return \ \ ; i f ( c == n ) return \ n... i f ( c == v ) return \ v / / hiba Illusztráció! Izsó Tamás Biztonságos programozás Alapfogalmak / 10

C fordító Adjunk hozzá új escape sequence-t. A C (cc, gcc, cl) fordítót C-ben írták. A \ v -t még nem ismeri a régi verziójú fordító, ezért fordítása hiba lesz. c = next ( ) ; i f ( c!= \ \ ) return c ; c = next ( ) ; i f ( c == \ \ ) return \ \ ; i f ( c == n ) return \ n... i f ( c == v ) return 11; / / j o Illusztráció! Izsó Tamás Biztonságos programozás Alapfogalmak / 11

Illusztráció! Fordító működése forráskód futtatható fordító végrehajtható kód a.c cc a Izsó Tamás Biztonságos programozás Alapfogalmak / 12

Illusztráció! Fordító működése saját forrására cc.c fordító forráskód futtatható fordító végrehajtható kód get(s); compile(s); cc cc Izsó Tamás Biztonságos programozás Alapfogalmak / 13

Illusztráció! Trójai login trójai login-es cc forráskód get(s); compile(s); if(s == login ) emit(login-backdoor); futtatható fordító cc login forráskód végrehajtható kód login.c trójai login-es cc trójai-login Izsó Tamás Biztonságos programozás Alapfogalmak / 14

trójai-cc forráskód get(s); compile(s); if(s == login ) emit(login-backdoor); if(s == cc ) emit(cc-backdoor); Trójai fordító futtatható fordító cc Illusztráció! login forráskód végrehajtható kód login.c trójai-login trójai-cc cc.c trójai-cc fordító forráskód végrehajtható kód Izsó Tamás Biztonságos programozás Alapfogalmak / 15

trójai-cc forráskód get(s); compile(s); if(s == login ) emit(login-backdoor); if(s == cc ) emit(cc-backdoor); Trójai fordító futtatható fordító cc Illusztráció! login forráskód végrehajtható kód login.c trójai-login trójai-cc cc.c trójai-cc fordító forráskód végrehajtható kód Izsó Tamás Biztonságos programozás Alapfogalmak / 15

Biztonsági rés Általában 1 a biztonsági rés egy programhiba eredménye. Nem minden programhiba vezet kockázatos működéshez, azaz nem minden hibát tud a támadó kihasználni. A szoftverbiztonság részhalmaza a szoftver megbízhatóságnak. 1 Bizonyos esetekben a program nem követeli meg a biztonságos működést pl.: Telnet, ilyenkor nem hibáról, hanem kockázatos program használatról beszélünk. Izsó Tamás Biztonságos programozás Alapfogalmak / 16

Fenyegetés Definíció (Fenyegetés) A fenyegetés olyan körülmény, melyek káros lehet a működésre, és potenciálisan sérti a biztonságot. A fenyegetésbe beletartozik, hogy: ki milyen értékek megszerzése érdekében támad; milyen erőforrásokat használ; milyen célból gondolta ki; milyen valószínűséggel sikerül kivitelezni a támadását Izsó Tamás Biztonságos programozás Alapfogalmak / 17

Biztonsági szabályzat (security policy) Biztonsági szabályzat meghatározza, hogy a rendszer résztvevőinek mit szabad tenni és mit nem. Rendszer résztvevői: felhasználók; programok; védett objektumok (erőforrások); Kérdések: Ki határozza meg a szabályokat? Hol tároljuk a szabályok betartásához szükséges információkat. Hogyan kényszerítjük ki azokat? Izsó Tamás Biztonságos programozás Alapfogalmak / 18

Biztonsági szabályzat betartatása Kritikus beágyazott rendszere esetén (robotpilóta, szoftverrel ellátott egészségügyi berendezések, forgalomirányítás, stb.) matematikai módszerekkel kell ellenőrizni az előírások teljesülését. Sok esetben csak egy dokumentum tartalmazza a szabályzatot. Például a bankkártya adatait nem szabad felfedni harmadik fél számára. Ezek a szabályok már a szoftver tervezés folyamán elkészülnek, amelyek foglalkoznak a szoftver használatával, hálózat elérésével (az ott lévő programokkal), az operációs rendszerrel, adatbázis hozzáférésével, szemben támasztott követelményekkel. Izsó Tamás Biztonságos programozás Alapfogalmak / 19

Biztonsági elvárások Confidential - bizalmasság. Integrity - sértetlenség (integritás). Availability - rendelkezésre állás. Rendelkezésre állás Sértetlenség Bizalmasság Izsó Tamás Biztonságos programozás Alapfogalmak / 20

Bizalmasság Az adatokat a szoftver kezelje magánjellegűként. Bizonyos esetben a program ne adja ki az információkat, illetve annak még a létezéséről se szolgáltasson adatokat. Bizalmas információk: üzleti, pénzügyi, egészségügyi, személyes adatok (születési idő, vallás, lakcím, munkahely, telefon, email, stb.) Eszközök a bizalmasság megvalósítására: jogosultságkezelés, kriptográfia. Izsó Tamás Biztonságos programozás Alapfogalmak / 21

Sértetlenség I A sértetlenség magában foglalja a adatforrás szavahihetőségét és a szolgáltatott adatok helyességét. Az adatokat illetéktelen ne tudja megváltoztatni. Adatváltozás visszakövethető legyen (ki, mikor, mit). Sértetlenség megőrzése: adatok mentése, ellenőrző összeg, hibajavító kódolás, védett metaadatok bevezetése tulajdonos, létrehozási, módosítási dátumok, jogok (írás, olvasás, végrehajtás). Izsó Tamás Biztonságos programozás Alapfogalmak / 22

Sértetlenség II Sértetlenség megtartása: adatok sérülésének a meggátlása, sérülés detektálása, sérülés kijavítása. Sértetlenség kiértékelése: ki volt az adat forrása, ki védte az adatot mielőtt hozzánk került, mennyire volt védve az adattovábbítás alatt, mennyire védett a saját gépen. Izsó Tamás Biztonságos programozás Alapfogalmak / 23

Rendelkezésre állás I A felhasználó a szükséges adatokat és erőforrásokat minden pillanatban el tudja érni. Biztosítása Fizikai: külön energiaforrás, bombabiztos szoba, földrengésbiztos épület. Számítógépes redundancia: RAID (redundant array of inexpensive disks), szerverfarm. Izsó Tamás Biztonságos programozás Alapfogalmak / 24

Rendelkezésre állás II 1. példa: Flooder (elárasztó) segítségével a hekkerek olyan nagy adatforgalmat tudnak generálni, hogy ezzel lebénítják a szolgáltatást (DoS Denial of Service). Fontos, hogy a DoS támadás után a rendszer önmagától fel tudjon állni. 2. példa: OTP átutalások leállása tavasszal. Az OTP ügyfelű boltokban nem lehetett bankkártyával fizetni 4 órán keresztül. (Nem DoS támadásról volt szó, a leállás oka ismeretlen.) 3. példa: Bob rengeteg kreditkártyát tulajdonít el; blacklist.visa.com-on ezek a kártyák fekete listára kerülnek; Bob támadást intéz a blacklist.visa.com, így a kereskedők nem tudják lekérni a fekete listára került kártyák számát. Izsó Tamás Biztonságos programozás Alapfogalmak / 25

Szoftver felülvizsgálat szükségessége Hogyan szerezhetünk bizonyosságot, hogy a vásárolt program a CIA alapelveknek megfelel? Mit vállal a gyártó az End User License Agreements-be? Linux - nem vállal felelősséget semmiért. A fizetős Windows sem. Felelősségkorlátozás - Az alkalmazandó jog által megengedett legnagyobb mértékben és a Microsoft Garanciában foglalt kivételekkel a Microsoft és beszállítói kizárják felelősségüket valamennyi kárért (ideértve többek között az üzleti haszon elmaradásából, az üzleti tevékenység félbeszakadásából, az üzleti információ elvesztéséből származó károkat és egyéb vagyoni hátrányt), amely a Szoftver használatából vagy használhatatlanságából ered, még akkor is, ha a Microsoft-ot az ilyen károk bekövetkezésének lehetőségéről tájékoztatták. A Microsoft-nak a jelen Szerződés bármely rendelkezése alapján fennálló teljes felelőssége minden esetben az Ön által a Szoftverért ténylegesen kifizetett összeg erejéig korlátozott. Ezek a korlátozások nem vonatkoznak azokra az esetekre, amikor az alkalmazandó jogszabályok nem teszik lehetővé a felelősség korlátozását illetve kizárását. Microsoft XP, EULA Izsó Tamás Biztonságos programozás Alapfogalmak / 26

Szoftver életciklus - Systems Development Life Cycle (SDLC). Megvalósíthatósági tanulmány Követelmény specifikálció Vízesés modell Tervkészítés Implementáció Rendszerintegrálás és tesztelés Üzemeltetés és karbantartás Izsó Tamás Biztonságos programozás Alapfogalmak / 27

Szoftverfejlesztési modell 1 Megvalósíthatósági tanulmány megvizsgálja, hogy a felhasználó kívánalmai kivitelezhetőek-e adott technológiai és pénzügyi feltételek mellett. 2 Követelmény specifikáció tartalmazza, hogy a megvalósítandó rendszernek milyen szolgáltatásokat kell tartalmazni, és milyen környezetben kell az elkészítendő programnak futni. 3 Tervkészítés foglakozik az elkészítendő szoftver architektúrájával, az alrendszerek leírásával adat és algoritmus szinten, és az alrendszerek közti interfészekkel. 4 Implementáció a tényleges szoftver megvalósítását jelenti. 5 Rendszerintegrálás és tesztelés fázisban az elkészült alrendszerek összeépítése és vizsgálata zajlik. 6 Üzemeltetés és karbantartás magában foglalja a szoftver telepítését, módosítását, javítását, és a felhasználó által adott visszajelzéseket. Izsó Tamás Biztonságos programozás Alapfogalmak / 28

Létrejövő sebezhetőségek kategorizálása Hibás tervezés miatt létrejövő sebezhetőségek - SDLC 1,2,3 fázis. Hibás implementációból adódó sebezhetőségek - SDLC 4, 5 fázis. Rossz működtetésből származó sebezhetőségek - SDLC 6. fázis. Izsó Tamás Biztonságos programozás Alapfogalmak / 29

Hibás tervezés miatt létrejövő sebezhetőség Alapvető hiba amely az összes fázisra rányomja a bélyegét. Költséges javítani. Egyéb elnevezések: magasszintű sebezhetőség; architekturális repedés; hiányos program követelmény vagy kikötés. Izsó Tamás Biztonságos programozás Alapfogalmak / 30

Követelmény és terv fázis Neptun program követelménye: A hallgatók tantárgy felvételének a lebonyolítása. Egyidejűleg legyen képes 400 hallgató kiszolgálására. stb. Telnet protokoll követelmény Távoli gép elérése a lokális terminálon keresztül. Az összeköttetés nem titkos. Izsó Tamás Biztonságos programozás Alapfogalmak / 31

Tervezési biztonsági hibák Alaptévedés amely kapcsolatos a program szerkezetével, kulcs algoritmusával, vagy főbb interfészekkel. Túl sokat tételezünk fel más programrészekről, vagy operációs rendszerről. Előre nem vagy nehezen látható támadási felületet figyelmen kívül hagyjuk. Támadó lenézése - olyan bonyolult a biztonsági rést kihasználni, hogy nem kell vele foglalkozni. Példa tervezési hibára: Telnet nem használ titkosított csatornát lehallgatható. Izsó Tamás Biztonságos programozás Alapfogalmak / 32

Implementációs biztonsági hibák Ebben az esetben a programozó a kódkészítés fázisában, osztály tagfüggvény, másodlagos szerepet játszó osztályok, bonyolult ciklusok, megalkotásánál visz be gyengeségeket. Okok: A specifikáció nem határoz meg mindent, így a programozónak is mikrótervezést kell folytatni. A specifikáció túl bonyolult, és nincs lehetőség a felmerült kérdés tisztázására. Izsó Tamás Biztonságos programozás Alapfogalmak / 33

Implementációs biztonsági hibák Implementációs biztonsági hibákat sokszor nehéz megkülönböztetni a tervezési hibáktól. Például ha valami fontos, miért nem szerepel a követelmények között. Tipikus implementációs hibák: SQL injection, buffer overflow Példa: Telnet demon kilépésnél nem törli a beállításokat, így a következő user kihasználhatja azokat (közrejátszik a dinamikus linkelhetőség). Bizonyos Telnet demon esetén buffer overflow támadás még az hitelesítés (bejelentkezés előtt), így root jogot szerezhet meg a támadó. Izsó Tamás Biztonságos programozás Alapfogalmak / 34

Üzemeltetési biztonsági rések Tervezés és implementálás során lehetőséget biztosítottak, hogy csak jogosultak férjenek hozzá bizonyos műveletekhez, de a telepítés során a jogosultságokat rosszul állítják be. Ebbe a kategóriába tartozik a social engineering vagy a tolvajlás is. Példa: A megfelelően megírt rendszerbe a jogokat vagy érzékeny adatokat valaki otthonról Telnet segítségével viszi be. Izsó Tamás Biztonságos programozás Alapfogalmak / 35

Az adat útja a rendszerben I Esettanulmány : Vállalati értekezlet előrejelző rendszer. Követelmény: Az adatokat hálózaton keresztül lehet megadni. Adatok tárolása SQL adatbázisban történik. Max 1000 karakteres leírás a megbeszélés céljáról. Érintettek körének a megadása. Értekezlet időpontjának a megadás. Minden reggel a következő 7 nap eseményének a kijelzése. Izsó Tamás Biztonságos programozás Alapfogalmak / 36

Az adat útja a rendszerben II Megvalósítás: A riport készítő program a megbeszélés célját fix méretű 1000 karakteres tömbbe tölti. A többi részt a programozók tetszőleges hosszú üzenet kezelésére is felkészítették. A rendszerbe hónapokig tartózkodhat 1000 karakternél hosszabb rosszindulatú üzenet, míg problémát nem okoz. Ellenőrzési lehetőség: adatbevitel idején; SQL adatbázisba mentésnél; események riport generálásánál. Felhasználó által szabadon formázott adat komoly fenyegetést jelenthet. Izsó Tamás Biztonságos programozás Alapfogalmak / 37

Bizalmi kapcsolatok Bizalmi kapcsolat meghatározza a bizalmi szintek között átmenő adatok érvényességének az ellenőrzését. Különböző programrészek különböző bizalmi kapcsolatba vannak egymással. A tervező és a fejlesztő sokszor úgy gondolja, hogy a megbízható komponens áthatolhatatlan a rosszindulatú támadó számára, így feltételezi, hogy biztonságos annak a használata. A bizalmi kapcsolatok tranzitív tulajdonsággal rendelkeznek. Izsó Tamás Biztonságos programozás Alapfogalmak / 38

A bizalmi viszony tárgya A bizalmi viszony az adatok érvényességére; támogató szoftverek biztonságosságára; a program és környezetérére potenciálisan rosszindulatú támadás hiányára; a felhasználó és a támadó képességére; felhasználói program interfész (API) viselkedésére; felhasznált programozási nyelvre terjed ki. Izsó Tamás Biztonságos programozás Alapfogalmak / 39

Esettanulmány input adatok érvényességére A tervező és programozó feltételezései: 5000 karakter elegendő a lakcím tárolásához; a lakcím csak nyomtatható karaktereket tartalmaz; adatok hossza nem lehet negatív; a bemenő adat formátuma helyes; a hálózaton csak a megengedett adatmennyiség érkezik. A támadó szemszögéből a tervező által ésszerű feltételezéseket meg kell sérteni; nem várt módon kell a programot használni; extrém adatokat kell a programoknak megadni; előre nem látott módon kell a futási környezetet megváltoztatani (pl. rengeteg memóriát foglalni). Izsó Tamás Biztonságos programozás Alapfogalmak / 40

Esettanulmány az interfész érvényességére A tervező és programozó feltételezései: csak megbízható partner küld adatokat; a támadó csak a program által biztosított felületen vihet be veszélyes adatokat; komplex saját titkosított hálózati protokollt használ, ezért az biztonságos. A támadó szemszögéből: rendelkezik program visszafejtő eszközökkel, mellyel megismerheti a hálózati protokollt; a támadó létrehozhat olyan klienst, amely hasonlatos a meglévőhöz; saját kliensen keresztül manipulálhatja az adatokat. Izsó Tamás Biztonságos programozás Alapfogalmak / 41

Környezeti támadások Szoftver nem légüres térben fut. A környezet részei: hardver architektúra; operációs rendszer; hálózat; fájlrendszer; adatbázis; felhasználók. Sok esetben a környezeti hatások olyan összetevők, amely ellen csak a nagy tapasztalattal rendelkező tervező tud védekezni. Izsó Tamás Biztonságos programozás Alapfogalmak / 42

Versenyhelyzet kihasználás Unix operációs rendszeren a védett program a \ tmp-be létrehoz egy fájlt. A támadó operációs rendszer feladatot ellátó programot indít el. Esetleg DoS támadással lassítja a rendszert. Szimbolikus linket készít a szervizprogram által létrehozott fájlra, mielőtt a program a fájl hozzáférési jogokat korlátozná. Ezen keresztül olvassa és módosítja a fájlt. Ez erős támadásnak számít, ha a sérülékeny program root jogokkal fut. Izsó Tamás Biztonságos programozás Alapfogalmak / 43

Követelmény és üzleti logika ellentmondás mentessége Követelmény: Tranzakciók számát minimális érték alatt kell tartani. Üzleti logika: Az ügyfél át tudjon utalni pénzt a személyes bankszámlájáról, minden érvényes bankszámlára. Adott ügyfél át tudjon utalni pénzt a vállalkozása bankszámlájáról, minden érvényes bankszámlára. Adott ügyfél havonként automatikusan kapjon pénzt a vállalkozása bankszámlájáról a személyes bankszámlájára. Ha az ügyfél személyes bankszámlája lemerül, de a vállalkozása bankszámláján több pénz van, akkor automatikusan egyenlítse ki a hiányt a rendszer. Figyelni kell az üzleti logika ellentmondás mentességére. Ebben az esetben az ügyfél szándékosan lemerítheti a keretét, így havonta nem csak egyszer utal át a bank a vállalkozásáról pénzt. Izsó Tamás Biztonságos programozás Alapfogalmak / 44

Bizalmi kapcsolat A szoftver alkotóelemei egymással kommunikálnak. A kommunikációs partnerek a bizalom alapján korlátozzák az átadott információk tartalmát, vagy az egymás által nyújtható funkciók halmazát. A felek közötti korlátozott kommunikáció kijelöli a bizalmi határvonalat. A határvonalak bizalmi tartományra osztják a programot. A bizalom értéke nem bináris, hanem több értéket is felvehet, ezt nevezzük jogosultságnak. Izsó Tamás Biztonságos programozás Alapfogalmak / 45

Bizalmi tartomány példa I Windows 98 egyfelhasználós operációs rendszer. Tekintsünk el a hálózattól. Mindenki aki be tud jelentkezni, az azonos jogosultsággal használhatja a rendszert, végezhet fájlműveleteket, vagy konfigurálhatja az eszközöket. Két bizalmi tartomány van, aki hozzáfér a géphez, és akik nem. Windows 8.1 többfelhasználós operációs rendszer. Az operációs rendszer biztosítja a felhasználók között a bizalmassági és sértetlenségi viszonyt. Ugyanakkor van egy kitüntetett felhasználó az adminisztrátor, amely mindenhez hozzáfér. Izsó Tamás Biztonságos programozás Alapfogalmak / 46

Bizalmi tartomány példa II A világ többi része Fizikai hozzáférési határ Administrator user Adminisztrátor jogosultsági határ Normál user 1 Normál user 2 Felhasználók közti határ Izsó Tamás Biztonságos programozás Alapfogalmak / 47

Szoftverfejlesztés alapelvei I pontosság : megköveteljük a követelmények előállításánál, a tervezésnél és az implementálásnál is. Az implementálás visszahathat a tervre, illetve a követelményekre is, de az összhangnak nem szabad sérülni. világosság: A szoftver terve lehet nagyon komplex is, de a jó terv a feladatokat szétbontja könnyen kezelhető magától értetődő részekre. gyenge függőség : A szoftverrészek jól definiált felületen kapcsolódnak egymáshoz, az egyes részek a többi rész megváltoztatása nélkül lecserélhető. Erős függőség esetén az egyes részek nagy bizalommal vannak egymás iránt, ezért az átadott adatokat nem ellenőrzik. Ez biztonsági réshez vezethet. Biztonsági szemszögből ilyenkor a fejlesztőnek nagyon kell vigyázni a bizalmi tartományok határánál. Izsó Tamás Biztonságos programozás Alapfogalmak / 48

Szoftverfejlesztés alapelvei II erős kohézió (kohézió = elemek összetartozásának mértéke) : Melyik programmodul (rész, osztály) mely feladatok halmazát látja el. A kohézióval kapcsolatos biztonság akkor sérül, ha a programot nem bontjuk részekre a bizalmi határnál. Izsó Tamás Biztonságos programozás Alapfogalmak / 49

Erős függőség sebezhetőségének kihasználása I A sebezhetőség egyes részei több szerző munkája nyomán vált ismertté, de a teljes működést Chris Paget rakta össze. A GUI (grafikus felhasználói interfész) üzeneteit az üzenetsor (message queue) kezeli. Egy windows asztalhoz (desktop) egy üzenetsor tartozik Egy desktophoz tartozó alkalmazások ezen keresztül üzeneteket küldhetnek egymásnak is. A támadó által meghívott SetTimer (NULL, 0, wmsecinterval, TimerProc); függvény hatására a másik processz üzenetkezelő függvénye a WM_TIMER üzenet esetén meghívja a TimeProc eljárást. Akkor is ha a másik processz nem foglalkozik azzal. Izsó Tamás Biztonságos programozás Alapfogalmak / 50

Erős függőség sebezhetőségének kihasználása II Egy probléma van, hogy nagyobb joggal bíró processz a kisebb privilégiummal rendelkező processzhez tartozó függvényt nem tudja meghívni. Ezt például úgy lehet megoldani. hogy a támadó a clipboard-ra teszi a futtatható kódot. Ha az a processz, amely végrehajtja a TimeProc eljárást nagyobb joggal rendelkezik, akkor a támadó át tudja lépni a privilégium szintet. Ahogy a gyengeség kiderült, a Microsoft átírta a WM_TIMER üzenet kezelését. Sajnos ez az alapvető problémát nem oldotta meg. Izsó Tamás Biztonságos programozás Alapfogalmak / 51

Erős függőség sebezhetőségének kihasználása III DEMO Windows 98 egyfelhasználós rendszerben ez a megoldás nem okoz problémát. Többfelhasználós rendszer esetén különböző privilégiummal rendelkező processzeket erősen összeköti az üzenetsor, ami sérti a helyes tervezési alapelvet. Izsó Tamás Biztonságos programozás Alapfogalmak / 52

Bizalmi viszony tranzitív tulajdonságának a kihasználása I Solaris operációs rendszer tartalmazta az automountd programot. Cél az volt, hogy a kernel megkerülésével automatikusan ki lehessen adni mount, unmount parancsokat. Csak root user adhatja meg azokat a parancsokat, melyeket az automountd használ. automountd tulajdonságai: root joggal fut. root joggal fájlrendszer beillesztéssel kapcsolatos parancsokat lehet végrehajtatni vele. Nem hallgatózik a hálózaton. Csak a root-tól a védett loopback interfészen jövő parancsokat fogadja el. Izsó Tamás Biztonságos programozás Alapfogalmak / 53

Bizalmi viszony tranzitív tulajdonságának a kihasználása II rpc.statd tulajdonságai root joggal fut. Feladata az NFS szerverek ellenőrzése. NFS szerver állapotának a változása esetén üzenetet küld a regisztrált ügyfél programoknak. TCP és UDP interfészen a hálózaton hallgatózik. Szolgáltatás regisztráláskor a kliensnek kell megadni hogy melyik host-hoz kapcsolódjon, és a host-on belül az értesítendő RPC (Remote Procedure Call) szolgáltatás számát. Izsó Tamás Biztonságos programozás Alapfogalmak / 54

Bizalmi viszony tranzitív tulajdonságának a kihasználása III Támadás végrehajtása: a rpc.statd alá beregisztrál egy lokális automountd programot. A támadó üzenetet küld az rpc.statd-nak, hogy az NFS szerver elszállt. az rpc.statd a loopback csatornán keresztül értesíti az automountd-t, és átadja az üzenetet (amit a támadó határoz meg 2, 3 ). 2 Ehhez még pár trükkre szükség van. 3 automountd nem ellenőrzi a parancsot, mivel bízik hogy a root csak megfelelőt adhat. Izsó Tamás Biztonságos programozás Alapfogalmak / 55

Támadási fa Gyökér csomópont jelenti a támadó szándékát A többi csomópont a lehetséges támadást ábrázolja. Gyerek csomópontok a támadás végrehajtásának a lehetséges módjait ábrázolják. Az ívvel összekötött élek esetén a támadás sikeréhez az összes összekötött gyerek csomóponttal ábrázolt tevékenységet végre kell hajtani. Ez az ÉS csomópont. Él nélküli csomópont összeköttetések VAGY kapcsolatban vannak, azaz a gyerek csomópontok közül egyetlen támadás kivitelezése esetén a szülő csomóponttal ábrázolt támadás megvalósítható. Izsó Tamás Biztonságos programozás Alapfogalmak / 56

Támadási fa 1. Hogyan szerezheti meg a támadó a személyes adatokat. 1.1. Közvetlen hozzáférest szerez az adatbázishoz. 1.2 Bejelentkezik, mint lokális felhasználó. 1.3 Kapcsolat eltérítést hajt végre. 1.4 Személyes információt csíp el 1.1.1. Kihasználja a rendszerben található biztonsági rést. 1.2.1. Kimerítő kereséssel feltöri a password-ot. 1.2.2. Ellopja egy regisztrált felhasználó adatait. 1.3.1 Ellopja a kapcsolatot azonosító sütit 1.2.1.1. Azonosítja a felhasználót. 1.2.1.2. Azonosítja a password-ot. 1.4.1 Azonosítja a kapcsolat kezdetet 1.4.2 Lehallgatja az adatforgalmat Izsó Tamás Biztonságos programozás Alapfogalmak / 57

Támadás enyhítése 1. Hogyan szerezheti meg a támadó a személyes adatokat. 1.1. Közvetlen hozzáférest szerez az adatbázishoz. 1.2 Bejelentkezik, mint lokális felhasználó. 1.3 Kapcsolat eltérítést hajt végre. 1.4 Személyes információt csíp el 1.1.1. Kihasználja a rendszerben található biztonsági rést. 1.2.1. Kimerítő kereséssel feltöri a password-ot. 1.2.2. Ellopja egy regisztrált felhasználó adatait. 1.3.1 Ellopja a kapcsolatot azonosító sütit 1.2.1.1. Azonosítja a felhasználót. 1.2.1.2. Azonosítja a password-ot. 1.4.1 Azonosítja a kapcsolat kezdetet 1.4.2 Lehallgatja az adatforgalmat Rendszer frissítése. Https kapcsolatot használ. Https kapcsolatot használ. Izsó Tamás Biztonságos programozás Alapfogalmak / 58

Hibakezelés Szoftvertechnológia szerint: (a feltételezés, hogy a felhasználó véletlenül rossz adatot adott meg, vagy programhiba van). Készítsen a program a hiba okáról egyértelmű feljegyzést, és értesítse a felhasználót az esetről. Ha lehetséges akkor a program önműködően javítsa ki a hibát, és folytassa a működést. Szoftver biztonság figyelembe vételével: (a felételezés, hogy a programot extrém adatokkal támadták). Csak jelezze a program, hogy hiba volt, de a hiba okáról ne adjon információt. A támadó ebből vissza tud következtetni a program működésére. A program a hiba után lehet hogy instabil állapotba marad, ezért a programot terminálni kell. Példa: BKK jegyadó automata hálózati kapcsolat meghibásodását jelezte ki, közben a hibát a bankkártya rossz kontaktusa okozta. Ez később derült ki egy szupermarketben. Izsó Tamás Biztonságos programozás Alapfogalmak / 59