Forrás

A feladathoz egy zip fájl van megadva, benne egy brainstorm.ko és egy logs fájl. A ko fájl egy ELF bináris, amit kernelmodulként lehet használni.

Cél

Itt kivételesen nem egy flaget kell megszerezni, hanem az alábbi kérdésekre kell választ adni:

  1. Who is the module’s author?
  2. What is the name of the function used to register keyboard events?
  3. What is the name of the function that converts keycodes to strings?
  4. What file does the module create to store logs? Provide the full path.
  5. What message does the module print when imported?
  6. What is the XOR key used to obfuscate the keys? (e.g. 0x01, 0x32)
  7. What is the password entered for ‘adam’?

Megoldás

1. kérdés

A modinfo paranccsal lehet metaadatokat lekérdezni egy kernelmodulról, többek között a szerző nevét is:

modinfo brainstorm.ko
...
Author: 0xEr3n
...

2. kérdés

Innentől a program méretéből és egyszerűségéből adódóan akár a webes Decompiler Explorert is lehet használni. Név alapján beazonosítható: register_keyboard_notifier

3. kérdés

Ez talán még egyértelműbb: keycode_to_string

4. kérdés

A spy_init függvényből kiolvasható, hogy létrehoz előbb egy spyyy könyvtárat a DebugFS-ben. Nemsokkal később egy keys fájlt hoz létre itt. A DebugFS egy operatív tárban létező fájlrendszer, ami kernel módban futó folyamatok debug logjainak a tárolására szolgál, de felhasználói módból is elérhető. Ez általában a /sys/kernel/debug helyre van csatolva.

Tehát a teljes elérési út: /sys/kernel/debug/spyyy/keys

5. kérdés

Akár ki lehet keresgetni a binárisból, de egyszerűbb betölteni egy VM-be:

sudo modprobe brainstorm.ko

w00tw00t

6. kérdés

A keycode_to_string függvényben van egy ciklus, ami minden karaktert XOR-oz 0x19-el.

7. kérdés

Az XOR művelet egy úgynevezett involúciós eljárás, azaz a mégegyszeri alkalmazása az identitást adja vissza: \((x ⨁ a) ⨁ a = x\). A logs fájl feltehetően ennek a kernelmodulnak egy logja. XOR-ozzuk a fájl minden bájtját 0x19-el, és a log végén találunk egy jelszót: supers3cur3passw0rd