Windows - Bejelentkezés figyelés

forráskód letöltése
Az Internetes Webkiszolgálók elérése általában névtelenül történik. Két fő csoportra oszthatók azon esetek, amikor felhasználói névvel és jelszóval jelentkeznek be: az egyik, amikor a rendszergazda ténykedik valamit, a másik amikor feltörik a szervert és/vagy vírusok jutnak be. Cél, hogy ez utóbbi esetekről a rendszergazda azonnal tájékoztatást kapjon, például mobiltelefonjára SMS formájában. Cikkünkben készítünk egy szkriptet, amely figyeli a rendszerbe történő sikeres és sikertelen bejelentkezéseket és minden esetben küld egy E-Mail üzenetet. Gyakorlatilag minden mobilszolgáltatónál előfizethető, hogy a leveleket SMS-ben küldjék el.
Mellékletben megtalálható a szóban forgó szkript "LogAlarm.vbs" néven. Használatához a "FMailItem.To="valaki@valahol.hu"" sorában az E-mail címet le kell cserélni a figyelmeztetés címzettjének címére.
A cikkünkben szereplő műveletek elvégzéséhez rendszergazdai jogosultságok szükségesek.
Az első lepés, hogy beállítsuk a sikeres és sikertelen bejelentkezések naplózását a számítógép naplórendjében.
Tartomány nélküli gépek esetében a Vezérlőpult > Felügyeleti eszközök > Helyi biztonsági házirend > Helyi házirend > Naplórend (Control Panel > Administrative Tools > Local Security Policy > Local Policies > Audit Policy) tárolót kell megkeresni.
Active Directory tartományok esetében a csoportházirendet kell megváltoztatni. A Felügyeleti eszközök > Active Directory - felhasználók és számítógépek (Administrative Tools > Active Directory Users and Computers) konzolon kattintsunk a gépet magában foglaló tárolón a jobb oldali egérgombbal és válasszuk a "Tulajdonságok" ("Properties") menüt. Itt a Csoportházirend > Szerkesztés > (Group Policy > Edit) gombra kattintva keressük meg a Számítógép konfigurációja > Windows beállításai > Biztonsági beállítások > Helyi házirend > Naplórend (Computer Configuration > Windows Settings > Security Settings > Local Policies > Audit Policy ) objektumot.
Itt a két különböző útvonal összekapcsolódik, akár tartománnyal, akár tartomány nélküli gépen akarunk bejelentkezést figyelni. Kattintsunk kétszer a "Bejelentkezés naplózása" ("Audit logon events") házirendpontra és jelöljük be mindkét jelölőnégyzetet a sikeres és sikertelen események naplózásához. A sikertelenre azért van szükség, hogy tudjuk: próbálkozik valaki bejutni a gépre. A sikeresre pedig azért, hogy tudjuk: valaki bejutott a gépre. Abban az esetben, ha csak mi rendelkezünk ehhez jogosultsággal, akkor valaki birtokolja a felhasználói nevünket és jelszavunkat. Miután végeztünk a beállításokkal indítsuk újra a gépet, hogy érvényre jussanak a változtatások.
Nézzünk meg a Felügyeleti eszközök > Eseménynapló (Administrative Tools > Event Viewer) szolgáltatásának "Biztonsági napló"-ját ("Security Log"). Ide kerülnek bejegyzésre a bejelentkezések. Szkriptünkben azt az eseményt fogjuk "elcsípni", amikor a rendszer az eseménynaplóba küldi a már megformázott, információval ellátott eseményt.
Első lépés hogy deklaráljunk egy segédváltozót üres sztringként.
Text=""
Készítünk egy eljárást, amely a Microsoft Outlook-ot használva elküldi az E-mail üzenetet.
Sub SendMail
Ehhez létre kell hozni egy új "Outlook.Application" objektumpéldányt.
Set FApplication = WScript.CreateObject("Outlook.Application")
És ebben egy új E-mail-t.
Set FMailItem=FApplication.CreateItem(olMailItem)
Az E-mail címzettje jelen példában "valaki@valahol.hu". Ezt át kell írni egy valós címre.
FMailItem.To="valaki@valahol.hu"
Tárgy (subject) mező tartalma legyen például: "Figyelem!".
FMailItem.Subject="Figyelem!"
Szövege a "Text" változó tartalma, a következő eljárásban fogjuk megadni.
FMailItem.Body=Text
A "Send" metódussal lehet a levelet elküldeni, majd zárjuk az eljárást.
FMailItem.Send
End Sub
Következik egy másik eljárás, amely az üzenet tartalmát (FMailItem.Body) állítja össze. Eseménykeletkezés után ezt hívjuk meg, összeállítja a tartalmat és meghívja az előző eljárást.
Sub SINK_OnObjectReady(objObject, objAsyncContext)
Az üzenettartalmat tároló változót töröljük
Text=""
Sikertelen bejelentkezés alkalmával az eseménynaplóba 529-es számú eseménykóddal ellátott bejegyzés kerül.
if (objObject.TargetInstance.EventCode = 529) then
Ebben az esetben lekérjük, hogy melyik felhasználó váltotta ki és összeállítjuk a "Text" változót.
     Text="A(z) " & objObject.TargetInstance.User & " felhasználó sikertelen bejelentkezést hajtott végre."
Meghívjuk a fenti E-mail küldő eljárást.
     SendMail
 End if
A sikeres bejelentkezés kódja 528. Az előzőhöz hasonlóan járunk el.
if (objObject.TargetInstance.EventCode = 528) then
    Text="A(z) " & objObject.TargetInstance.User & " felhasználó sikeres bejelentkezést hajtott végre."
     SendMail
 End if
End Sub
Most jön a szkript törzse, amelynél indul a futtatatás (az előző eljárások innen illetve egymásból indítva hajtódnak végre). A "WinMgmts" szolgáltatás köti össze a WMI objektumokat az alkalmazásokkal. A kapcsolat megvalósításához létre kell hozni egy objektumpéldányt, beállítva a biztonsági szintet úgy, hogy a futtató felhasználó bejelentkezési adatait adja át a rendszernek. Egy rendszergazda jogosultsági szintje már megfelelő, ezért a szkript futtatásához rendszergazdaként kell bejelentkezni.
Set services = GetObject("WinMgmts:{impersonationLevel=impersonate, (security)}") 
Set sink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
A "SWbemServices" objektum "ExecNotificationQueryAsync" metódusa kifejezetten eseménylekérdezésekhez használható. Elfogunk vele minden eseményt, amelyet a "Win32_NTLogEvent" szolgáltatásnak küldenek (TargetInstance ISA 'Win32_NTLogEvent'), de csak az elmúlt 1 percet feldolgozva (WITHIN 60) és csak az új események készítését vesszük figyelembe (__InstanceCreationEvent).
services.ExecNotificationQueryAsync sink, _
"SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_NTLogEvent'"
Megjelenítünk egy ablakot "Várakozás bejelentkezésre" felirattal és a szkript futása addig tart, amíg rá nem kattintunk az "OK" nyomógombjára.
WScript.Echo "Várakozás bejelentkezésre"