Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jak można włamać się do systemu skanując jedynie kod kreskowy

ghost666 07 Mar 2016 18:04 5112 9
  • 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

    Jak można włamać się do systemu skanując jedynie kod kreskowy


    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.

    Jak można włamać się do systemu skanując jedynie kod kreskowy Jak można włamać się do systemu skanując jedynie kod kreskowy


    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.

    Jak można włamać się do systemu skanując jedynie kod kreskowy


    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.

    Jak można włamać się do systemu skanując jedynie kod kreskowy Jak można włamać się do systemu skanując jedynie kod kreskowy Jak można włamać się do systemu skanując jedynie kod kreskowy Jak można włamać się do systemu skanując jedynie kod kreskowy


    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
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 napisał 9498 postów o ocenie 7531, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • #2
    leonow32

    Poziom 30  
    No bez przesady :D :D :D niech mi ktoś wygeneruje kod kreskowy, który miałby uruchamiać jakiś program. Obiecuję że przetestuję skanerem na moim kompie :)

    Sam często wykorzystuję komendy kontrolne w kodach DataMatrix ale jakoś sobie nie wyobrażam, żeby kod miał uruchamiać jakiś program, ściągać coś z netu, uruchomić ściągnięty program, itd. Taki kod musiałby być przede wszystkim monstrualnie ogromny, żeby pomieścić wszystkie te operacje.
  • #3
    ghost666
    Tłumacz Redaktor
    leonow32 napisał:
    No bez przesady :D :D :D niech mi ktoś wygeneruje kod kreskowy, który miałby uruchamiać jakiś program. Obiecuję że przetestuję skanerem na moim kompie :)

    Sam często wykorzystuję komendy kontrolne w kodach DataMatrix ale jakoś sobie nie wyobrażam, żeby kod miał uruchamiać jakiś program, ściągać coś z netu, uruchomić ściągnięty program, itd. Taki kod musiałby być przede wszystkim monstrualnie ogromny, żeby pomieścić wszystkie te operacje.


    Heh, specjalnie nie przepisywałem tutaj całego artykułu, żeby nie ułatwiać ludziom sprawy :D ale pod linkiem napisane jest, jak to zrobić. Dokładnie. Wystarczy przez gui-r pobrać cokolwiek z ftp i odpalić malware.
  • #4
    szczodros
    Poziom 18  
    Wygenerować kod na resetowanie komputera i przykleić na jakiś produkt w sklepie :D
    Albo sprawdzić cenę i zresetować całość :D
  • #5
    adikbo
    Poziom 26  
    Bardzo ciekawy wektor ataku. W sumie jakby na to nie patrzeć to tak naprawdę skaner można przyrównać do klawiatury. Oczywiście samo przeprowadzenie ataku nie jest proste, ale przy odpowiedniej wiedzy i ilości prób można by przygotować zestaw "kodów" wykonujący określoną procedurę ataku.

    Pozdrawiam,

    adikbo
  • #6
    raffin
    Poziom 24  
    Wcale nie jest to takie oczywiste. Owszem, czytnik może automatycznie zrealizowac całą sekwencję operacji dowolnych operacji klawiaturowych (np rozdzielanie danych i uzupełnianie poszczególnych pól w przelewie, baziedanych, itp... danymi zawartymi w kodzie), ale po wcześniejszym wgraniu makra.
    Praktycznie do większości czytników kodów da sie wgrać makro, które zawiera kolejne kroki... realizowane po zeskanowaniu konkretnego typu kodu, ale proces programowania jest dość żmudny i polega na odczytaniu co najmniej kilku lub kilkunastu kodów dla konkretnego czytnika (nie licząc kodów "Begin/End").
    Tak, więc z pojednczym kodem niewiele zwojujemy.
  • #7
    ghost666
    Tłumacz Redaktor
    raffin napisał:
    Wcale nie jest to takie oczywiste. Owszem, czytnik może automatycznie zrealizowac całą sekwencję operacji dowolnych operacji klawiaturowych (np rozdzielanie danych i uzupełnianie poszczególnych pól w przelewie, baziedanych, itp... danymi zawartymi w kodzie), ale po wcześniejszym wgraniu makra.
    Praktycznie do większości czytników kodów da sie wgrać makro, które zawiera kolejne kroki... realizowane po zeskanowaniu konkretnego typu kodu, ale proces programowania jest dość żmudny i polega na odczytaniu co najmniej kilku lub kilkunastu kodów dla konkretnego czytnika (nie licząc kodów "Begin/End").
    Tak, więc z pojednczym kodem niewiele zwojujemy.


    Pojedynczym kodem możemy, jak pokazał autor (link w pierwszym poście), uruchomić cmd.exe, gdzie odpalimy FTP, pobierzemy jakiś plik skądś i go uruchomimy. Co więcej trzeba? :D
  • #10
    arecoag
    Poziom 19  
    Programy do skanowania wykorzystywane w marketach są zabezpieczone przed takimi atakami, mało wszystko jest rejestrowane, łącznie z błędami. Może jakiś osiedlowy sklepik dla którego program pisała firma "krzak".