A Lansweeper és a TEA

Ebben a bejegyzésben a Lansweeper névre hallgató alkalmazásról ejtünk pár szót. Az alkalmazás nagy segítség lehet egy rendszergazdának, hiszen automatikusan felderíti a hálózaton lévő gépeket, az azokon futó alkalmazásokat (pontos verziószámmal együtt), az AD felhasználókat, és gyakorlatilag minden mást, ami a számítógépes infrastruktúrában van. A felderített eszközöket, felhasználókat, stb. egy webes felületen keresztül menedzselhetjük.

Egyszóval tényleg egy erős eszköz a rendszergazda kezében, de ugye Ben Parkertől tudjuk, hogy nagy erővel nagy felelősség jár. Amennyiben egy támadó hozzáfér a Lansweeper webes felületéhez, hozzáfér a fent említett információkhoz. Ez már önmagában nagy segítség a támadónak, de ennél még tovább lehet menni.

A Lansweeper Microsoft SQL adatbázist használ adattárolásra, amihez alapértelmezett telepítés esetén létrehoz egy “lansweeperuser” nevű felhasználót, akinek “mysecretpassword0*” a jelszava. Ha ez a hozzáférés nem lett megváltoztatva, akkor egy támadó könnyűszerrel hozzáfér az adott MSSQL adatbázishoz. Szerencsére a felhasználó jogai megfelelően korlátozva vannak, csak a Lansweeper saját adatbázisát éri el.

Ami a lényeg: a Lansweeper működéséhez semmilyen kliens program telepítése nem szükséges, az adatokat DCOM-on keresztül gyűjtögeti. Ehhez természetesen kell neki legalább egy felhasználó, aki a hálózat összes gépéhez hozzáfér, illetve van joga a DCOM használatához. A felhasználók a már említett MSSQL adatbázisban kerülnek tárolásra. A jelszavak természetesen titkosítva vannak, de ha a Lansweeper ki tudja bontani őket, akkor mi is 🙂

Több lehetőségünk is van kideríteni, hogy hogyan, milyen algoritmussal, milyen kulccsal kerülnek titkosításra a jelszavak. A Lansweeper Configuration Utility például egy lehetséges kiindulópont. Ez egy Delphiben írt alkalmazás, rögtön nekieshetünk DeDe-vel, de jobban járunk, ha kicsit jobban körülnézünk a telepítési könyvtárban.

Kiderül, hogy az adatokat rendszeres időközönként összegyűjtő alkalmazás egy service (LansweeperService.exe), ami Visual Basic for .NET-ben van írva. Na, ez már sokkal jobban néz ki, ha nincs obfuszkálva, a .NET Reflector bármelyik .NET-es nyelven képes megmutatni a program forrását.

Az Alternate nevű osztályban találunk is egy árulkodó nevű metódust: DecryptPassword.
lsw_1

A kódot böngészve hamar egyértelművé válik, hogy az adatbázisban tárolt jelszó egy Base64-enkódolt string, ami tartalmazza magát a jelszót XTea algoritmussal titkosítva, illetve a titkosítási kulcs nyolc karakterét.

Az is kiderül, hogy a kulcs többi része statikus, a Starter.ScanConfig.PwdStr változóban tárolódik. A PwdStr a ScanConfiguration osztály konstruktorában kerül beállításra:
lsw_2
A HelperFunctions.dll fájlban megtalálható az XTea osztály, tehát a jelszavak visszafejtéséhez még csak XTea-implementációt sem kell keresgélnünk 🙂
lsw_3
Ezen a ponton minden rendelkezésünkre áll egy jelszóvisszafejtő alkalmazás megírásához. Illetve a “megírás” szó helyett használhatunk “összeollózás”-t is, hiszen a Reflector tulajdonképpen kész kódot ad a kezünkbe. Az alábbi linkek letölthetitek a kész programot egy Visual Studio 2010 projekt formájában: LansweeperDecrypt

A fenti program csak egy PoC, userfriendly-séget nem nagyon kell várni tőle – igazából csak egy pentest idejére lett összedobva. Azóta készítettem egy, az mssql_sql modulra épülő auxiliary modult a Metasploit-hoz, ami a megadott adatbázisból kigyűjti a Lansweeper-nek megadott felhasználókat.
lsw_4
A modult itt találjátok: lansweeper.rb