12 października 2010 13:18
Forma kanoniczna
- Nie wolno podejmować żadnych decyzji mających wpływ na bezpieczeństwo na podstawie nazwy zasobu.
- Zasób posiada często więcej niż jedną poprawną nazwę.
► Plik może być dostępny za pomocą wielu nazw:
Tajny plik.doc TAJNYP'1.DOC
c:\Dane\Tajne\Tajny plik.doc c:\Dane\Tajne\Tajny plik.doc.
C:\DANE\TAJNE\TAJNY PLIK.DOC c:\Dane\Jawne\..\Tajne\Tajny plik.doc ..\..\Tajne\Tajny plik.doc Tajny plik.doc::$DATA \\?\c:\Dane\Tajne\Tajny plik.doc
- ::$DATA- strumień danych
- URL
- www.alfa.pl i www.alfa.pl.
o w nazwach można stosować szesnastkowe kody znaków
► Niektóre analizatory UTF-8 akceptują nielegalne, przedłużone kodowania, np. kodem znaku „?" jest:
3F
a nielegalne kodowania tego znaku wyglądają następująco:
CO BF EO 80 BF FO 80 80 BF F8 80 80 80 BF FC 80 80 80 80 BF
► Należy uważnie obliczać długość napisów.
- typ wchar_t
o w Linuksie ma 4 bajty, w Windowsie 2 bajty
o funkcje operujące na ciągach znaków tego typu oczekują długości bufora podanej w liczbie znaków a nie bajtów Atak DoS
► Rozważmy program:
#include <stdio.h>
int main(int argc, char *args[]) -C printf(args[l]); return 0;
>
► Skompilujmy go:
gcc -Wall -02 -o cform cform.c
► Spróbujmy go uruchomić:
$ ./cform "a/.s"
$ ./cform "°/,s%s"
$ ./cform "y,s%s%s%s'/s/Cs/.s%s%s7»s"
Naruszenie ochrony pamięci
- wniosek: printf(napis) jest niebezpieczne, bo napis może zawierać znaki formatujące
BSK Strona 13