Kody kreskowe otaczają nas z każdej strony, jak donosi portal hackaday, wykorzystać je można jako wektor przenoszący komendy, pozwalające nam zdobyć kontrolę nad urządzeniem, które je odczytuje. Jak okazuje się, nikt nie spodziewa się tego rodzaju ataku, co dosyć dziwne, ponieważ od dawna wiadomo, że jest to istotna luka w zabezpieczeniu - już jakiś czas temu donoszono, że poprzez wygenerowanie odpowiedniego kodu kreskowego - będącego poleceniem kasowania tabeli SQL - można spowodować awarię całej bazy danych. W poniższym artykule opisano jednak trochę inne podejście niż to skupiające się na SQLu - chodzi o zupełne przejęcie zarządzania daną maszyną z pomocą tylko kodów kreskowych.
Hacker [virustracker], będący autorem poradnika, opisuje w jaki sposób przesłać można do terminala komendy sterujące. Poprzez wykorzystanie ADF (Advanced Data Formatting - Zaawansowane Formatowanie Danych) możliwe jest przesyłanie komend typu klawisz windows+inny klawisz, dzięki czemu uruchomić można cmd.exe, pobrać plik przez FTP i uruchomić go. Niezależnie od tego jaki komputer kontroluje czytnik kodów kreskowych, to taka operacja pozwoli przejąć kontrolę nad systemem.
Kody kreskowe wykorzystywane są w supermarketach i mniejszych sklepach, centrach logistycznych, na pocztach i w przemyśle. Warto zadać sobie pytanie czy i na ile jest to bezpieczny protokół, przyjrzyjmy się mu bliżej.
Wprowadzenie do kodów kreskowych
Kody kreskowe to graficzne identyfikatory pozwalające na reprezentację pewnych informacji zakodowanych w postaci białych i czarnych linii o różnej szerokości. Najczęściej spotykane kody kreskowe składają się z czarnych i białych pasów, różniących się odbiciem - białe odbijają światło, a czarne nie.
Istnieje kilka rodzajów używanych najczęściej kodów kreskowych: code39, code128, code93, EAN128, EAN13 QR itp. Większość z nich - oprócz kodów QR - jest jednowymiarowa i na takich skupia się poniższy artykuł. Najczęściej spotykane są kody typu code128 i ataki poprzez wykorzystanie tego kodu zostaną opisane poniżej.
Kody kreskowe typu code128
Zasadniczo skaner kodów kreskowych rozpoznawany jest przez system jako klawiatura, więc może też wprowadzać do komputera informacje dokładnie tak jak klawiatura. Kody kreskowe - takie jak UPC - wspierają tylko cyfry, inne pozwalają na kodowanie cyfr i liter, natomiast code128 koduje wszystkie znaki ASCII. Długość takiego kodu zależna jest od potrzeby i maksymalnie można pomieścić do 232 znaków w jednym kodzie.
Kody typu 128 pogrupować można w trzy kategorie:
* 128A: Cyfry i duże litery, znaki kontrolne i specjalne
* 128B: Cyfry i duże i małe litery, znaki kontrolne i specjalne
* 128C/EAN 128: Zestaw par cyfr od 00 do 99 - łącznie 100.
Kod tego typu składa się z czterech części: kodu startu, danych, sumy kontrolnej i kodu kończącego sekwencję.
Poszczególne cyfry kodowane są w szerokości poszczególnych linii (czarnych) i przerw (białe) w kodzie. Kody startu dla poszczególnych kodów wyglądają następująco:
128A 11010000100
128B 11010010000
128C 11010011100
kod kończący sekwencję to zawsze 1100011101011.
Znaki kontrolne i generowanie kodów kreskowych
Zgodnie zatem z powyższym opisem można generować kody kreskowe, zawierające dowolne znaki. Jednakże, aby móc przejąć kontrolę nad terminalem, chcemy wykonać pewne operacje, dlatego też zainteresowani będziemy przekazywaniem do terminala kodów kreskowych zawierających znaki kontrolne, nie będące słowami czy znakami drukowalnymi, takie jak powroty karetki, nowe linie i tabulacje. Znaki te zawarte są w kodach ASCII od 0 do 31 i 127.
Jeśli spojrzymy w tabelę kodów ASCII, da się zakodować niemalże wszystkie kombinacje klawiszy, które pozwalają na kontrolowanie funkcji programów, na przykład ctrl+o, służące bardzo często do otwierania plików w niektórych aplikacjach, takich jak przeglądarki internetowe czy MS Word. Inne kombinacje znaków z kolei spowodują, że program jest w stanie wyskoczyć ze swojej normalnej pętli i wykonać dowolną komendę, na przykład wspominane wyżej ctrl+o.
W internecie dostępnych jest wiele programów generujących kody kreskowe, na przykład BarTender, z którego korzysta autor poradnika. Pozwala on wygenerować kod kreskowy na podstawie ciągu znaków, jakie mają być w nim zawarte. Oprócz niego oczywiście istnieje bardzo wiele innych programów, a dodatkowo można zawsze napisać własny - informacje o tym jak dokładnie kodowane są znaki w kodach kreskowych każdego z typów, są łatwo dostępne.
Po zainstalowaniu programu wybieramy ?file?->?new? i klikamy ?finish? otrzymując pusty szablon. Klikamy na ikonkę kodu kreskowego i wybieramy jego rodzaj - code128. Teraz możemy zaprogramować dowolną sekwencję znaków w kodzie kreskowym. Jeden z pokazanych powyżej kodów podaje na wejście ciąg znaków "FutureSec" a następnie kombinację klawiszy Ctrl+O.
Potencjalne scenariusze ataku
1. Opłać sobie rachunek. Odpowiednio zaprogramowany kod kreskowy wykorzystać można na przykład do zaatakowania aplikacji do płatności, czy samego terminala obsługującego kasę. Uzyskanie dostępu do kasy pozwala już na wiele rzeczy.
2. Szpitalne archiwa - systemy te często wykorzystują kody kreskowe do oznaczania pacjentów, leków etc. Atakując skaner w takim systemie można uzyskać dostęp do niejawnych danych medycznych.
3. Losy na loterii także posiadają kody, skanowane przez maszynę obsługującą loterię. Pozwala to na atakowanie samej maszyny, czy też podrabianie losów.
4. Listy polecone także posiadają kody kreskowe, więc zastąpienie kodu odpowiednim kodem, pozwoli na zaatakowanie komputerów poczty.
Jak się bronić?
* Wyłączyć trzeba zaawansowane funkcje skanera (ADF), które domyślnie są bardzo często włączone.
* Unikać stosowania czytnika kodów kreskowych jako wejścia klawiatury.
* Ustalić czarną listę zabronionych skrótów klawiszowych.
Źródła:
http://en.wooyun.io/2016/01/28/Barcode-attack-technique.html
Link
Hacker [virustracker], będący autorem poradnika, opisuje w jaki sposób przesłać można do terminala komendy sterujące. Poprzez wykorzystanie ADF (Advanced Data Formatting - Zaawansowane Formatowanie Danych) możliwe jest przesyłanie komend typu klawisz windows+inny klawisz, dzięki czemu uruchomić można cmd.exe, pobrać plik przez FTP i uruchomić go. Niezależnie od tego jaki komputer kontroluje czytnik kodów kreskowych, to taka operacja pozwoli przejąć kontrolę nad systemem.
Kody kreskowe wykorzystywane są w supermarketach i mniejszych sklepach, centrach logistycznych, na pocztach i w przemyśle. Warto zadać sobie pytanie czy i na ile jest to bezpieczny protokół, przyjrzyjmy się mu bliżej.
Wprowadzenie do kodów kreskowych
Kody kreskowe to graficzne identyfikatory pozwalające na reprezentację pewnych informacji zakodowanych w postaci białych i czarnych linii o różnej szerokości. Najczęściej spotykane kody kreskowe składają się z czarnych i białych pasów, różniących się odbiciem - białe odbijają światło, a czarne nie.
Istnieje kilka rodzajów używanych najczęściej kodów kreskowych: code39, code128, code93, EAN128, EAN13 QR itp. Większość z nich - oprócz kodów QR - jest jednowymiarowa i na takich skupia się poniższy artykuł. Najczęściej spotykane są kody typu code128 i ataki poprzez wykorzystanie tego kodu zostaną opisane poniżej.
Kody kreskowe typu code128
Zasadniczo skaner kodów kreskowych rozpoznawany jest przez system jako klawiatura, więc może też wprowadzać do komputera informacje dokładnie tak jak klawiatura. Kody kreskowe - takie jak UPC - wspierają tylko cyfry, inne pozwalają na kodowanie cyfr i liter, natomiast code128 koduje wszystkie znaki ASCII. Długość takiego kodu zależna jest od potrzeby i maksymalnie można pomieścić do 232 znaków w jednym kodzie.
Kody typu 128 pogrupować można w trzy kategorie:
* 128A: Cyfry i duże litery, znaki kontrolne i specjalne
* 128B: Cyfry i duże i małe litery, znaki kontrolne i specjalne
* 128C/EAN 128: Zestaw par cyfr od 00 do 99 - łącznie 100.
Kod tego typu składa się z czterech części: kodu startu, danych, sumy kontrolnej i kodu kończącego sekwencję.
Poszczególne cyfry kodowane są w szerokości poszczególnych linii (czarnych) i przerw (białe) w kodzie. Kody startu dla poszczególnych kodów wyglądają następująco:
128A 11010000100
128B 11010010000
128C 11010011100
kod kończący sekwencję to zawsze 1100011101011.
Znaki kontrolne i generowanie kodów kreskowych
Zgodnie zatem z powyższym opisem można generować kody kreskowe, zawierające dowolne znaki. Jednakże, aby móc przejąć kontrolę nad terminalem, chcemy wykonać pewne operacje, dlatego też zainteresowani będziemy przekazywaniem do terminala kodów kreskowych zawierających znaki kontrolne, nie będące słowami czy znakami drukowalnymi, takie jak powroty karetki, nowe linie i tabulacje. Znaki te zawarte są w kodach ASCII od 0 do 31 i 127.
Jeśli spojrzymy w tabelę kodów ASCII, da się zakodować niemalże wszystkie kombinacje klawiszy, które pozwalają na kontrolowanie funkcji programów, na przykład ctrl+o, służące bardzo często do otwierania plików w niektórych aplikacjach, takich jak przeglądarki internetowe czy MS Word. Inne kombinacje znaków z kolei spowodują, że program jest w stanie wyskoczyć ze swojej normalnej pętli i wykonać dowolną komendę, na przykład wspominane wyżej ctrl+o.
W internecie dostępnych jest wiele programów generujących kody kreskowe, na przykład BarTender, z którego korzysta autor poradnika. Pozwala on wygenerować kod kreskowy na podstawie ciągu znaków, jakie mają być w nim zawarte. Oprócz niego oczywiście istnieje bardzo wiele innych programów, a dodatkowo można zawsze napisać własny - informacje o tym jak dokładnie kodowane są znaki w kodach kreskowych każdego z typów, są łatwo dostępne.
Po zainstalowaniu programu wybieramy ?file?->?new? i klikamy ?finish? otrzymując pusty szablon. Klikamy na ikonkę kodu kreskowego i wybieramy jego rodzaj - code128. Teraz możemy zaprogramować dowolną sekwencję znaków w kodzie kreskowym. Jeden z pokazanych powyżej kodów podaje na wejście ciąg znaków "FutureSec" a następnie kombinację klawiszy Ctrl+O.
Potencjalne scenariusze ataku
1. Opłać sobie rachunek. Odpowiednio zaprogramowany kod kreskowy wykorzystać można na przykład do zaatakowania aplikacji do płatności, czy samego terminala obsługującego kasę. Uzyskanie dostępu do kasy pozwala już na wiele rzeczy.
2. Szpitalne archiwa - systemy te często wykorzystują kody kreskowe do oznaczania pacjentów, leków etc. Atakując skaner w takim systemie można uzyskać dostęp do niejawnych danych medycznych.
3. Losy na loterii także posiadają kody, skanowane przez maszynę obsługującą loterię. Pozwala to na atakowanie samej maszyny, czy też podrabianie losów.
4. Listy polecone także posiadają kody kreskowe, więc zastąpienie kodu odpowiednim kodem, pozwoli na zaatakowanie komputerów poczty.
Jak się bronić?
* Wyłączyć trzeba zaawansowane funkcje skanera (ADF), które domyślnie są bardzo często włączone.
* Unikać stosowania czytnika kodów kreskowych jako wejścia klawiatury.
* Ustalić czarną listę zabronionych skrótów klawiszowych.
Źródła:
http://en.wooyun.io/2016/01/28/Barcode-attack-technique.html
Link
Fajne? Ranking DIY
