Mettől meddig?

Ha valaki megkérdezi tőled, hogy valaki mettől mettig dolgozott egy adott napon egy adott gépen, vagy még inkább hogy valakik mettől meddig dolgoztak valahány gépen, akkor mit mondanál? Ha némileg jártas vagy a Windows világban, talánazt mondanád, hogy bejelentkezéstől kijelentkezésig. Persze azt nem tudod, hogy az illető mit csinált, de jó közelítéssel azt mondhatjuk, hogy reggel bejött, bejelentkezett, egész nap dolgozott, majd mielőtt hazaindult volna, kijelentkezett (kikapcsolta a gépét), tehát ezen eseményeket kell kinyerni az XP (2000) eseménynaplójából.
Tegyük fel, hogy egy kis cégnél jársz, ahol van 7-8 gép, semmi MOM. Hol vannak az események? A gép indulásáról és leállásáról a system logban, a felhasználó bejelentkezéséről és kijelentkezéséről pedig a security logban. Az EventCombMT nevü eszközzel szépen össze lehet gyűjteni például a bejelentkezés és kijelentkezés adatokat akár hónapokra visszamenően. Egyszerű, mint a pofon.
 
Csináltál is már ilyet? Mert ha igen, akkor tudod, hogy a fenti módszer nem működik. Én a múlt héten összegyűjtöttem egy jókora adatmennyiséget és a következőket tapasztaltam. Az (nem hálózati) bejelentkezési esemény azonosítója 528. A bejegyzésből a következőket tudhatjuk meg.
  1. Ki jelentkezett be
  2. Mikor jelentkezett be
  3. Milyen tartományba és milyen gépbe jelentkezett be
  4. Milyen bejelentkezési típusról van szó (lásd a táblázat alább)
  5. Mi a bejelentkezés azonosítója
  6. Egyebek
 zemben a sikertelen bejelentkezésekkel, ahol a sikertelenség okát mind külön eseményazonosító jelzi, a sikeres bejelentkezés típusát az 528-as esemény leírásába, a Logon type sorba rejtették a programozók számomra érthetetlen módon. Na mindegy, még a Windows Server 2003 Súgó is tartalmazza a bejelentkezési típusokat, azt meg mindenki olvasta már, tehát nem újdonság. Akinek mégis az lenne, annak idemásoltam a teljes listát, érdemes átböngészni.
 
Logon type

Logon title

Description

2

Interactive

A user logged on to this computer.

3

Network

A user or computer logged on to this computer from the network.

4

Batch

Batch logon type is used by batch servers, where processes may be executing on behalf of a user without their direct intervention.

5

Service

A service was started by the Service Control Manager.

7

Unlock

This workstation was unlocked.

8

NetworkCleartext

A user logged on to this computer from the network. The user’s password was passed to the authentication package in its unhashed form. The built-in authentication packages all hash credentials before sending them across the network. The credentials do not traverse the network in plaintext (also called cleartext).

9

NewCredentials

A caller cloned its current token and specified new credentials for outbound connections. The new logon session has the same local identity, but uses different credentials for other network connections.

10

RemoteInteractive

A user logged on to this computer remotely using Terminal Services or Remote Desktop.

11

CachedInteractive

A user logged on to this computer with network credentials that were stored locally on the computer. The domain controller was not contacted to verify the credentials.

 

Rögtön látható, hogy a feltöltött kép egy "Interactive", "valódi" bejelentkezést mutat, méghozzá a vállalati hálózatban, mert különben 11-es lett a logon type, ami a cachelt bejelentkezést jelezné. A bejelentkezési azonosítóm (Logon ID) a 0x0,0x2003B. A logon ID például azért jó, hogy megvan, mert a megfelelő be- és kijelentkezési eseményeket a Logon ID segítségével lehet összekötni. Ha tehát az a kérdés, hogy mikor jelentkeztem ki ebből a munkamenetből, akkor csupán keresni kell egy 538-as típusú eseményt, ahol a Logon ID megegyezik a fentivel. A bejegyzett események időkülönbsége megadja mennyit használtam aznap a gépemet.

A fura a dologban az, hogy NINCS ilyen Logon ID-vel rendelkező 538-as esemény a naplóban!! Némi kutakodás után találtam egy tudásbázis cikket (828020), amely ugyan pontosan leírja a jelenséget, de nem ad magyarázatot és csupán a Windows 2000-es gépekre vonatkozik. A cikk egyébként jelenleg 2005. szeptember 6-i keltezésű, vagyis igencsak friss. További bányászkodás után egy izgalmas cikket találtam több helyen is, amelynek egy bekezdése részben utal a fenti tudásbázis cikkre, jelzi, hogy éppen az interactive kijelentkezésekkel van gond, de még mindig nem ad magyarázatot. Az idevágó szövegrész a következő:

" have a bit of bad news, though. Windows 2000 suffers from the same strange bug that NT suffers from: The OS occasionally neglects to log event ID 538. (So far, in Windows 2000, I’ve noticed this problem only for interactive logons.) In other words, you might see an event ID 528 that doesn’t have a corresponding event ID 538."

A kérdés ost már csak az, hogy miért? És Windows XP-n miért, mikor a Microsoft tudásbázis cikk csak a Windows 2000-et jelzi hibás rendszerként.

Végül ezen a lapon találtam meg a megoldást, és nagyon elszomorított. A cikk lényege a következő. Bejelentkezéskor létrejön egy "logon session", amelynek az azonosítója az eseménynapló bejegyzésből is kiolvasható Logon ID. Ehhez a sessionhöz kapcsolódki egy (egyébként mindenki által ismert) "access token" is. Ezt a tokent lehet a session működése alatt azonosításra használni a háttérben. Amikor egy alkalmazás, akár az operációs rendszer része, akár más gyártó terméke, igényli ezt a tokent, a rendszer a token referenciaszámát eggyel növeli, így nyilvántartva azt, hogy a tokent használja egy szoftverkomponens. Amikor az adott alkalmazás lezárul és ezt az alkalmazás jelzi a rendszer felé, akkor a referenciaszám eggyel csökken. Ha egy token referenciaszáma nem zéró, akkor a token session-je nem törölhető, tehát nem jöhet létre 538-as esemény sem! Bingó! A gyengén megírt alkalmazások "token leak" hibája miatt – főleg ha azok nem is MS termékek – nem garantálható, hogy egy 528-as eseményhez társulni fog 538-as. Vagyis a fenti mutatvány, a mettől meddig kérdésére adott elméleti válasz a gyakorlatban elvérik. 

Már csak az alábbi kérdések maradtak bennem:

  1. Miért nincs "Cause" része a 828020 cikknek?
  2. Miért ne lehetne a shutdown parancs kiadásakor 538-as eseményt generálni, hiszen a session elpusztul, különben nem állna le a gép?

Ha van tapasztalatotok, osszátok meg velem. Ha pedig valaki megkérdezi, hogy meg lehet-e állapítani, hogy valaki mettől meddig dolgozott, akkor azt kell mondani, hogy nagy valószínűségel nem lehet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: