SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
WCE Internals
      Hernan Ochoa
(hernan@ampliasecurity.com)
What is WCE?
• Windows Credentials Editor v1.0

• Manipulates Windows Logon Sessions

• Evolution of the Pass-the-Hash Toolkit (also
  written by me)

• WCE v1.1 to be published after this is over 
WCE features
• Dump in-memory credentials of logon
  sessions
  – Lists in-memory logon sessions
     • Dumps in-memory username, domain, LM & NT
       hashes
     • current, future and terminated (…)
  – Great to ‘steal’ credentials not stored locally
WCE features

• Pass-The-Hash
  – Change/delete NTLM credentials of logon sessions
  – Create new logon sessions and associate arbitrary
    NTLM credentials
WCE features

• Does not require code injection to dump in-
  memory credentials (v1.1)
  – No need to run code inside LSASS.EXE
  – Can locate, list and decrypt Logon Sessions and
    NTLM credentials just by reading memory
WCE features
• Single executable (wce.exe)
  – Easier to use, upload, etc.

• Supports
  – Windows XP
  – Windows 2003
  – Windows Vista
  – Windows 7
  – Windows 2008
How does it work?
• Windows NT Logon and authentication model


            Logon
                                       LSA
          Processes




                      Authentication
                        Packages
Windows NT Logon and
Authentication Model
      WINLOGON.EXE



      LSA AUTH API
      (LSASRV.DLL)


       MSV1_0.DLL
     (NTLM AUTH PKG)
            …


        LSASS.EXE
Windows NT Logon and Authentication Model:
                  NTLM

                                     WINLOGON.EXE




                                                              NTLM
                                                              CREDS
msv1_0.dll!LsaApLogonUser/Ex/Ex2()
                                                     Logon
   • Authenticates user
                                                    Session
   • Create logon session
                                                     (LUID)
   • Add Credentials to Session

              LSASS.EXE
Logon Sessions  Credentials

           Logon Session
Process       (LUID)          NTLM
                           CREDENTIALS
Implementation:
                   two possible ways…
 'Use Auth Package API’ Method    ‘Read LSASS Memory’ Method
           (less safe)                     (very safe)



• List LUIDs                      • Read LSASS Memory
• Run code inside LSASS.EXE          • Learn inner workings
• Call MSV1_0.DLL Functions          • Undocumented
    • AddPrimaryCredential              structures
    • GetPrimaryCredentials          • List Logon Sessions
    • DeletePrimaryCredential        • Find keys and friends
• No need to encrypt or decrypt      • Decrypt/Encrypt
  credentials                           credentials

• OS/Version ~independent         • OS/Version dependent
Initialization of auth packages

                   Loads authentication packages and
LSASS.EXE
                    calls <authpkg>.dll!LsaApInitializePackage

                         • For Example,
                           msv1_0.dll!LsaApInitializepackage()


 NTSTATUS LsaApInitializePackage(
     __in ULONG AuthenticationPackageId,
     __in PLSA_DISPATCH_TABLE LsaDispatchTable,
     __in_opt PLSA_STRING Database,
     __in_opt PLSA_STRING Confidentiality,
     __out PLSA_STRING *AuthenticationPackageName );
Functions provided to auth packages

typedef struct LSA_DISPATCH_TABLE {
        PLSA_CREATE_LOGON_SESSION             CreateLogonSession;
        PLSA_DELETE_LOGON_SESSION             DeleteLogonSession;
        PLSA_ADD_CREDENTIAL                   AddCredential;
        PLSA_GET_CREDENTIALS                  GetCredentials;
        PLSA_DELETE_CREDENTIAL                DeleteCredential;
        PLSA_ALLOCATE_LSA_HEAP                AllocateLsaHeap;
        PLSA_FREE_LSA_HEAP                    FreeLsaHeap;
        PLSA_ALLOCATE_CLIENT_BUFFER           AllocateClientBuffer;
        PLSA_FREE_CLIENT_BUFFER               FreeClientBuffer;
        PLSA_COPY_TO_CLIENT_BUFFER            CopyToClientBuffer;
        PLSA_COPY_FROM_CLIENT_BUFFER          CopyFromClientBuffer;
} LSA_DISPATCH_TABLE, *PLSA_DISPATCH_TABLE;
Functions handling credentials


NTSTATUS AddCredential(
  __in PLUID LogonId,
  __in ULONG AuthenticationPackage,
  __in PLSA_STRING PrimaryKeyValue,
  __in PLSA_STRING Credentials
);
Functions handling credentials
NTSTATUS GetCredentials(
 __in PLUID LogonId,
 __in ULONG AuthenticationPackage,
 __inout PULONG QueryContext,
 __in BOOLEAN RetrieveAllCredentials,
 __inout PLSA_STRING PrimaryKeyValue,
 __out PULONG PrimaryKeyLength,
 __out PLSA_STRING Credentials
     );
Functions handling credentials


NTSTATUS DeleteCredential(
  __in PLUID LogonId,
  __in ULONG AuthenticationPackage,
  __in PLSA_STRING PrimaryKeyValue
);
Windows NT Logon and Authentication Model:
             NTLM in detail

                                            WINLOGON.EXE




 LUID luid = LsaLogonUser( …,MSV1_0_PACKAGE_ID,… )



 msv1_0.dll!LsaApLogonUser/Ex/Ex2()
     • Create logon session
     • Authenticates against local sam or AD
     • msv1_0.dll!NlpAddPrimaryAddCredential(LUID, [username, domain,
        LM/NT hashes],…)
         • Lsasrv.dll!AddCredential(LUID,…)
'Use Auth
                    Implementation:
Package API’
  Method
                       Summary
       • Find by ‘signatures’ and heuristics
           • MSV1_0.DLL!NlpAddPrimaryCredential
           • MSV1_0.DLL!NlpDeletePrimaryCredential
           • MSV1_0.DLL!NlpGetPrimaryCredential
       • Run code inside LSASS.EXE
       • Call *PrimaryCredential functions
       • LSASRV.DLL functions are not called directly, eg:
           • MSV1_0.DLL!NlpAddPrimaryCredential()
                • LSASRV.DLL!AddCredential()

       • No need to encrypt/decrypt credentials
'Use Auth          Implementation:
 Package API’
   Method        Credentials Block Format


• MSV1_0.DLL!NlpAddPrimaryCredential(PLUID pluid, BYTE* ptrtoCreds,
  DWORD dwCredsSize);

• MSV1_0.DLL!NlpDeletePrimaryCredential(PLUID pluid);

• MSV1_0.DLL!NlpGetPrimaryCredential(PLUID pluid, DWORD* ptrtoCreds,
  DWORD whatever);


                 ptrtoCreds                ?
'Use Auth
                       Implementation:
Package API’       Credentials Block Format
  Method



      ptrtoCreds

                   typedef struct {
                      UNICODE_STR ustr_domain;
                      UNICODE_STR ustr_username;
                      BYTE NThash[16];
                      BYTE LMhash[16];
                      BYTE Udomain[MAX_DOMAIN_LEN];
                      BYTE Uuser[MAX_USERNAME_LEN];
                   } CREDSBLOCK;
'Use Auth
Package API’
                   Implementation:
  Method       Credentials Block Format

ptrtoCreds

       +00h          000C000D
       +04h          00000030
       +08h          00080009
       +0Ch          0000003C
       +10h          11111111111111111111111111111111
       +20h          22222222222222222222222222222222
       +30h          D0O0M0A0IN00
       +3Ch          T0E0S0T00
'Use Auth
 Package         Implementation:
   API’
 Method
            working with Session Isolation
'Use Auth
 Package           Implementation:
   API’
 Method
             working with Session Isolation

             Inject code                 LSASS.EXE
   WCE.EXE

                                        INJECTED CODE
                                             Call
                                       msv1_0.dll!NlpAdd
                                       PrimaryCredential
                                             Etc.

Session 1                  Session 0
'Use Auth
 Package
                 Implementation:
   API’     working with Session Isolation
 Method
'Use Auth
 Package
                 Implementation:
   API’     working with Session Isolation
 Method
'Use Auth
 Package
                 Implementation:
   API’     working with Session Isolation
 Method
'Use Auth
   Package                        Implementation:
     API’
   Method
                        working with Session Isolation




(Note: CreateRemoteThread() is not the the only way to inject & run code...)
'Use Auth
 Package              Implementation:
   API’
 Method
               working with Session Isolation

   • Windows Vista/7/2008
         • NTDLL.DLL!NtCreateThreadEx

   • Windows XP/2003
     • RDP / Terminal Services
         • Create a Windows Service and do everything there
         • WCE.EXE also acts as a Windows Service
             • Installs, starts, stops and removes itself
             • IPC via Named Pipe
‘Read LSASS
  Memory’          Implementation
  Method


• No need to run code inside LSASS.EXE (SUPER SAFE!)
   • ReadProcessMemory() only!

• Reverse engineer inner workings of LSASS.EXE (LSASRV.DLL)
   • Structures used internally to hold logon sessions
   • Structures used internally to hold credentials
       • Structures used internally to hold NTLM Hashes
   • Decrypt credentials
       • Find keys
       • Algorithm
       • Anything else needed to decrypt (e.g.: IV)
‘Read LSASS                               Implementation:
  Memory’                       Logon sessions & credentials structures
  Method
                                  LSASRV.DLL!LogonSessionList
                                  LSASRV.DLL!LogonSessionListCount
SESSION_ENTRY
 NEXT       PREV        …       UserLen    UserPtr      DomainLen       DomainPtr     …    PtrToCreds



   ?        AuthPkgId            PtrToCreds

CREDS_ENTRY
                                                                         CREDS_HASH_ENTRY

                            ?     PrimaryLen         PrimaryPtr     HashesLen       HashesPtr



                                                NTLM         LM          Domain     User
DomainLen   DomainOff       userLen   userOff                       …
                                                hash        hash          Name      Name

NTLM_CREDS_BLOCK (encrypted)
‘Read LSASS              Implementation:
       Memory’
       Method         changes in SESSION_ENTRY
        Windows XP/2003                      Windows Vista/7/2008

struct SESSION_ENTRY {                 struct SESSION_ENTRY {

           DWORD nextEntry;                    DWORD nextEntry;
           DWORD prevEntry;                    DWORD prevEntry;
           DWORD unk1;                         DWORD UNKNOWN[18];
           DWORD unk2;                         DWORD userSize;
           DWORD userSize;                     DWORD userNamePtrUnicode;
                                               DWORD machineSize;
           DWORD userNamePtrUnicode;
                                               DWORD machinePtrUnicode;
           DWORD machineSize;
                                               …
           DWORD machinePtrUnicode;
           ….
     +0x48 DWORD PtrToCreds;            +0x88 DWORD PtrToCreds;
};                                     };
Implementation:
                           LsaEncryptMemory()
       Windows XP/2003                          Windows Vista/7/2008

                         Lsasrv.dll!LsaEncryptMemory()



                              NTLM_CREDS_BLOCK



• Encrypted with desX-CBC or RC4         • Encrypted with 3DES-CBC or AES-128-CFB
   • If mod(size/8) == 0 => desX-cbc        • If mod(size/8) == 0 => 3DES-CBC
   • Otherwise use RC4                      • Otherwise use 3DES-CBC
• Encrypted with desX-CBC                • Encrypted with 3DES-CBC
Implementation
lsasrv.dll!LsaInitializeProtectedMemory (XP/2003)
                                0                                    190h
   VirtualAlloc()
                                    90h      8 8 8

  cbRandomKey = 100h
  pDESXTable
  pRandomKey
                                           struct DESXTable {
  SystemFunction036( byte                    byte inWhitening[8];
  Feedback[8],8)                             byte outWhitening[8];
                                             DESTable desTable;
                                          }
  desxkey( pDESXTable ,
  pRandomKey )                            struct DESTable {
                                             unsigned long keys[16][2];
                                          }
  SystemFunction036(
  pRandomKey, cbRandomKey )
Implementation
lsasrv.dll!LsaInitializeProtectedMemory                    (Vista/7/2008)
h3DesProvider = BCryptOpenAlgorithmProvider( )
hAesProvider = BCryptOpenAlgorithmProvider( )
                                     BCryptSetProperty( h3DesProvider, "CBCMode" )
                                     BCryptSetProperty( hAesProvider, "CFBMode" )

BCryptGetProperty( h3DesProvider, "ObjectLength" )
BCryptGetProperty( hAesProvider, "ObjectLength" )

                      BCryptGenRandom( h3DesProvider, 24 )
                      h3DesKey = BCryptGenerateSymmetricKey( h3DesProvider, 24 )

BCryptGenRandom( hAesProvider, 16 )
hAesKey = BCryptGenerateSymmetricKey( hAesProvider, 16 )

                                         BCryptGenRandom( InitializationVector, 16 )
Implementation:
                   crypto functions used
      Windows XP/2003                   Windows Vista/7/2008


•    Uses custom desX-CBC        • Uses Cryptography API: Next
    implementation                 Generation (CNG)
     – Located in LSASRV.DLL            • Exported by BCRYPT.DLL
     – Is not an API                    • BCryptOpenAlgorithmProvider
     – Not exported by any Win32
                                        • BCryptSetProperty /
        DLL
                                          BCryptGetProperty
                                        • BCryptGenRandom
                                        • BCryptGenerateSymmetricKey
                                        • BCryptEncrypt / BCryptDecrypt
Implementation
• desX-cbc ‘trick’ – ‘Reuse’ LsaEncryptMemory
                        CODE!LSASRV.DLL
                         LsaEncrptMemory()




           DATA                                  DATA
        IV, DESXTABLE                         IV, DESXTABLE



        LSASRV.DLL
                                             LSASRV.DLL

        LSASS.EXE                            PROCESS.EXE
Implementation:
                pseudo-code (Vista/7/2008)


LSASRV.DLL!LsaInitializeProtectedMemory(..) {

     …
        h3DesKey = BCryptGenerateSymmetricKey(
BCryptGenRandom(24 bytes) );
        …
        hAesKey = BCryptGenerateSymmetricKey(BCryptGenRandom(16
bytes))
        …
        IV = BCryptGenRandom(16 bytes)
}
Implementation
   Finding the encryption key (Vista/7/2008)
  LSASRV.DLL!LsaInitializeProtected
  Memory()
NTSTATUS WINAPI BCryptGenerateSymmetricKey(
      __inout BCRYPT_ALG_HANDLE hAlgorithm,
      __out BCRYPT_KEY_HANDLE *phKey,
      __out_opt PUCHAR pbKeyObject,
      __in ULONG cbKeyObject,
      __in PUCHAR pbSecret,
      __in ULONG cbSecret,
      __in ULONG dwFlags );
Implementation
    Finding the encryption key (Vista/7/2008)

• BCRYPT_KEY_HANDLE hKey
  – hKey = Pointer to Memory Block (BLOB)
  – hKey + 0x3C => encryption key


• To extract key, read from LSASS.EXE(LSASRV.DLL)
  – ((unsigned char*)h3DesKey)+0x3C
  – ((unsigned char*))hAesKey)+0x3C
Implementation
    Finding the encryption key (Vista/7/2008)

• Actually, offset changes between OSes
  – hKey + 0x3C => encryption key (Win7)
  – hKey + 0x2C => encryption key (Win2008)


• To be safe, I ‘discover’ the offset at runtime
  – I wrote a custom function for that
    ‘KeyDiscoverOffset()’
Implementation
     Finding the encryption key (Vista/7/2008)
• KeyDiscoverOffset()
  – Uses CNG API to create key object with hard-coded key
  – Look for hard-coded key inside BLOB pointed to by
    BCRYPT_KEY_HANDLE

 BCRYPT_KEY_HANDLE hKey              +0h


 hKey =                              +3Ch    KKKKKKKK…
 BCryptGenerateSymmetricKey(...,”K
 KKKKKKK…”)
                                     +...h
Implementation
          Finding the IV (Vista/7/2008)
• IV is also needed
• To extract IV
  – Read IV from LSASS.EXE (LSASRV.DLL) memory
  – Symbol ‘InitializationVector’


• With IV and Key, just use CNG
  – BCryptDecrypt and friends
  – No need to run code inside LSASS.EXE
Implementation:
                    Addresses Needed

      Windows XP/2003              Windows Vista/7/2008



•   LsaLogonSessionList        •   LsaLogonSessionList
•   LsaLogonSessionListCount   •   LsaLogonSessionListCount
•   DESXTable                  •   h3DesKey
•   Feedback                   •   InitializationVector
•   LsaEncryptMemory
Implementation:
             Addresses Needed

• Database of addresses

• ID by SHA1 hash of LSASRV.DLL

• Yes, addresses still an issue..
   • But ..
       • Getlsasrvaddr.exe to the rescue..
GetLSASRVADDR.exe
• Finds needed addresses automatically
   • User-friendly
   • No IDC script, IDA or anything weird like that
     is needed 

• Uses Microsoft symbol server
   • Requires http outbound connection (!)

• Associates addresses and DLLs using SHA1
GetLSASRVADDR.exe
GetLSASRVADDR.exe
• Could be integrated with WCE but..
      • The outbound connection might be an
        issue
      • huge not-there-by-default DLLs needed
           •   Symsrv.dll and dbghelp.dll (new version,
               not the default one)

•   Could implement own version of ‘symbol
    server’ protocol

•   Or perhaps it is best to use heuristics..
Implementation:
       ASLR and Windows Vista/7/2008

• LSASRV.DLL addresses and ASLR
  – Not an issue..
  – To locate symbols don’t use hard-coded addresses
  – Use Offsets instead
  – ASLR is just at boot time
  – Get current LSASRV.DLL Base Address at run-time
    and add offset
WCE execution flow (simplified)
                     List           READ
   START                                        END
                    Creds?          MEM



                    XP/2003
Install/Run/Use        ?              Vista/7   INJECT
  WCE Service                         /2008      CODE


                  CurSessionID ==
                   LSASessionID?
WCE vs PTH
Feature                                    WCE                  PTH
Supports Windows Vista/7/2008               YES                  NO

Single executable                           YES                  NO
                                                          (many executables,
                                                        need to upload dll, etc)
Delete NTLM Credentials                     YES                  NO

Works with session isolation                YES                  NO
(e.g.: via RDP)
Programmatic discovery of new                YES                 NO
LSASRV addresses                             (via
                                       getlsasrvaddr)
Seamlessly chooses code injection or        YES                  NO
reading from memory
Conclusions
• WCE v1.1
  – More features and OSes supported
  – Works via RDP/Terminal Services
  – No code injection needed
  – Better solution for ‘addresses issue’
  – ‘zombie’ logon sessions and credentials still
    around in Windows 7 and family..
  – Download WCE v1.1!
     • http://www.ampliasecurity.com/research/wce_v1_1.tgz
‘zombie’ logon sessions and credentials
         NTLM
         CREDS

    Logon
   Session       RDP/Terminal Services
                 connection




                                         Domain Admin
Some Server
(e.g.: backup
server nobody
cares about)

                           Attacker
Preguntas?
             Gracias!
Hernan Ochoa (hernan@ampliasecurity.com)

http://www.twitter.com/hernano
http://www.twitter.com/ampliasecurity
http://www.ampliasecurity.com/blog/

Contenu connexe

Tendances

Laporan multiclient chatting client server
Laporan multiclient chatting client serverLaporan multiclient chatting client server
Laporan multiclient chatting client servertrilestari08
 
Tatu: ssh as a service
Tatu: ssh as a serviceTatu: ssh as a service
Tatu: ssh as a servicePino deCandia
 
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legione-Legion
 
Ice mini guide
Ice mini guideIce mini guide
Ice mini guideAdy Liu
 
Java Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVMJava Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVModnoklassniki.ru
 
Windows 8 JavaScript (Wonderland)
Windows 8 JavaScript (Wonderland)Windows 8 JavaScript (Wonderland)
Windows 8 JavaScript (Wonderland)Christopher Bennage
 
Jafka guide
Jafka guideJafka guide
Jafka guideAdy Liu
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»SpbDotNet Community
 
Threads v3
Threads v3Threads v3
Threads v3Sunil OS
 
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...chen yuki
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch
 
Hibernate Import.Sql I18n
Hibernate Import.Sql I18nHibernate Import.Sql I18n
Hibernate Import.Sql I18nyifi2009
 
NoSQL and JavaScript: a love story
NoSQL and JavaScript: a love storyNoSQL and JavaScript: a love story
NoSQL and JavaScript: a love storyAlexandre Morgaut
 
Exploit ie using scriptable active x controls version English
Exploit ie using scriptable active x controls version EnglishExploit ie using scriptable active x controls version English
Exploit ie using scriptable active x controls version Englishchen yuki
 
NoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryNoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryAlexandre Morgaut
 
JS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.js
JS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.jsJS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.js
JS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.jsJSFestUA
 
Riak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup GroupRiak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup Groupsiculars
 
The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84Mahmoud Samir Fayed
 

Tendances (20)

Laporan multiclient chatting client server
Laporan multiclient chatting client serverLaporan multiclient chatting client server
Laporan multiclient chatting client server
 
Tatu: ssh as a service
Tatu: ssh as a serviceTatu: ssh as a service
Tatu: ssh as a service
 
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
 
Ice mini guide
Ice mini guideIce mini guide
Ice mini guide
 
Java Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVMJava Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVM
 
Windows 8 JavaScript (Wonderland)
Windows 8 JavaScript (Wonderland)Windows 8 JavaScript (Wonderland)
Windows 8 JavaScript (Wonderland)
 
Jafka guide
Jafka guideJafka guide
Jafka guide
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
 
Threads v3
Threads v3Threads v3
Threads v3
 
Blockchain - a simple implementation
Blockchain - a simple implementationBlockchain - a simple implementation
Blockchain - a simple implementation
 
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
Hibernate Import.Sql I18n
Hibernate Import.Sql I18nHibernate Import.Sql I18n
Hibernate Import.Sql I18n
 
Django cryptography
Django cryptographyDjango cryptography
Django cryptography
 
NoSQL and JavaScript: a love story
NoSQL and JavaScript: a love storyNoSQL and JavaScript: a love story
NoSQL and JavaScript: a love story
 
Exploit ie using scriptable active x controls version English
Exploit ie using scriptable active x controls version EnglishExploit ie using scriptable active x controls version English
Exploit ie using scriptable active x controls version English
 
NoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryNoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love Story
 
JS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.js
JS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.jsJS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.js
JS Fest 2019. Thomas Watson. Post-Mortem Debugging in Node.js
 
Riak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup GroupRiak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup Group
 
The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84The Ring programming language version 1.2 book - Part 51 of 84
The Ring programming language version 1.2 book - Part 51 of 84
 

En vedette

Oss forensics fosscomm_2011
Oss forensics fosscomm_2011Oss forensics fosscomm_2011
Oss forensics fosscomm_2011fangjiafu
 
Bypass dbms assert
Bypass dbms assertBypass dbms assert
Bypass dbms assertfangjiafu
 
Cursor injection
Cursor injectionCursor injection
Cursor injectionfangjiafu
 
Oracle forensics 101
Oracle forensics 101Oracle forensics 101
Oracle forensics 101fangjiafu
 
Santorini island. 2
Santorini island. 2Santorini island. 2
Santorini island. 2Nikos
 
Wce12 uba ampliasecurity_eng
Wce12 uba ampliasecurity_engWce12 uba ampliasecurity_eng
Wce12 uba ampliasecurity_engfangjiafu
 
Understanding and selecting_dsp_final
Understanding and selecting_dsp_finalUnderstanding and selecting_dsp_final
Understanding and selecting_dsp_finalfangjiafu
 
Ddos analizi
Ddos analiziDdos analizi
Ddos analizifangjiafu
 

En vedette (8)

Oss forensics fosscomm_2011
Oss forensics fosscomm_2011Oss forensics fosscomm_2011
Oss forensics fosscomm_2011
 
Bypass dbms assert
Bypass dbms assertBypass dbms assert
Bypass dbms assert
 
Cursor injection
Cursor injectionCursor injection
Cursor injection
 
Oracle forensics 101
Oracle forensics 101Oracle forensics 101
Oracle forensics 101
 
Santorini island. 2
Santorini island. 2Santorini island. 2
Santorini island. 2
 
Wce12 uba ampliasecurity_eng
Wce12 uba ampliasecurity_engWce12 uba ampliasecurity_eng
Wce12 uba ampliasecurity_eng
 
Understanding and selecting_dsp_final
Understanding and selecting_dsp_finalUnderstanding and selecting_dsp_final
Understanding and selecting_dsp_final
 
Ddos analizi
Ddos analiziDdos analizi
Ddos analizi
 

Similaire à Wce internals rooted_con2011_ampliasecurity

DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menaceDEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menaceFelipe Prado
 
Understanding Windows Lateral Movements
Understanding Windows Lateral MovementsUnderstanding Windows Lateral Movements
Understanding Windows Lateral MovementsDaniel López Jiménez
 
SSL Certificates and Operations
SSL Certificates and OperationsSSL Certificates and Operations
SSL Certificates and OperationsNisheed KM
 
OpenStack Toronto Meetup - Keystone 101
OpenStack Toronto Meetup - Keystone 101OpenStack Toronto Meetup - Keystone 101
OpenStack Toronto Meetup - Keystone 101Steve Martinelli
 
InSecure Remote Operations - NullCon 2023 by Yossi Sassi
InSecure Remote Operations - NullCon 2023 by Yossi SassiInSecure Remote Operations - NullCon 2023 by Yossi Sassi
InSecure Remote Operations - NullCon 2023 by Yossi SassiYossi Sassi
 
Securing Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTPSecuring Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTPRafal Gancarz
 
0x002 - Windows Priv Esc - A Low Level Explanation of Token Theft
0x002 - Windows Priv Esc - A Low Level Explanation of Token Theft0x002 - Windows Priv Esc - A Low Level Explanation of Token Theft
0x002 - Windows Priv Esc - A Low Level Explanation of Token TheftRussell Sanford
 
0x02 - Windows Privilege Esc - A Low Level Explanation of Token Theft
0x02 - Windows Privilege Esc - A Low Level Explanation of Token Theft0x02 - Windows Privilege Esc - A Low Level Explanation of Token Theft
0x02 - Windows Privilege Esc - A Low Level Explanation of Token TheftRussell Sanford
 
Issue certificates with PyOpenSSL
Issue certificates with PyOpenSSLIssue certificates with PyOpenSSL
Issue certificates with PyOpenSSLPau Freixes
 
Offensive Python for Pentesting
Offensive Python for PentestingOffensive Python for Pentesting
Offensive Python for PentestingMike Felch
 
Passbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managmentPassbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managmentThierry Gayet
 
Lateral Movement - Phreaknik 2016
Lateral Movement - Phreaknik 2016Lateral Movement - Phreaknik 2016
Lateral Movement - Phreaknik 2016Xavier Ashe
 
Codetainer: a Docker-based browser code 'sandbox'
Codetainer: a Docker-based browser code 'sandbox'Codetainer: a Docker-based browser code 'sandbox'
Codetainer: a Docker-based browser code 'sandbox'Jen Andre
 
Lateral Movement: How attackers quietly traverse your Network
Lateral Movement: How attackers quietly traverse your NetworkLateral Movement: How attackers quietly traverse your Network
Lateral Movement: How attackers quietly traverse your NetworkEC-Council
 
Lateral Movement - Hacker Halted 2016
Lateral Movement - Hacker Halted 2016Lateral Movement - Hacker Halted 2016
Lateral Movement - Hacker Halted 2016Xavier Ashe
 
Securing Cassandra The Right Way
Securing Cassandra The Right WaySecuring Cassandra The Right Way
Securing Cassandra The Right WayDataStax Academy
 

Similaire à Wce internals rooted_con2011_ampliasecurity (20)

DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menaceDEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
 
Understanding Windows Lateral Movements
Understanding Windows Lateral MovementsUnderstanding Windows Lateral Movements
Understanding Windows Lateral Movements
 
SSL Certificates and Operations
SSL Certificates and OperationsSSL Certificates and Operations
SSL Certificates and Operations
 
Dominique
DominiqueDominique
Dominique
 
OpenStack Toronto Meetup - Keystone 101
OpenStack Toronto Meetup - Keystone 101OpenStack Toronto Meetup - Keystone 101
OpenStack Toronto Meetup - Keystone 101
 
InSecure Remote Operations - NullCon 2023 by Yossi Sassi
InSecure Remote Operations - NullCon 2023 by Yossi SassiInSecure Remote Operations - NullCon 2023 by Yossi Sassi
InSecure Remote Operations - NullCon 2023 by Yossi Sassi
 
Securing Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTPSecuring Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTP
 
0x002 - Windows Priv Esc - A Low Level Explanation of Token Theft
0x002 - Windows Priv Esc - A Low Level Explanation of Token Theft0x002 - Windows Priv Esc - A Low Level Explanation of Token Theft
0x002 - Windows Priv Esc - A Low Level Explanation of Token Theft
 
0x02 - Windows Privilege Esc - A Low Level Explanation of Token Theft
0x02 - Windows Privilege Esc - A Low Level Explanation of Token Theft0x02 - Windows Privilege Esc - A Low Level Explanation of Token Theft
0x02 - Windows Privilege Esc - A Low Level Explanation of Token Theft
 
OpenStack Keystone
OpenStack KeystoneOpenStack Keystone
OpenStack Keystone
 
Issue certificates with PyOpenSSL
Issue certificates with PyOpenSSLIssue certificates with PyOpenSSL
Issue certificates with PyOpenSSL
 
Offensive Python for Pentesting
Offensive Python for PentestingOffensive Python for Pentesting
Offensive Python for Pentesting
 
Passbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managmentPassbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managment
 
Intro to Apache Shiro
Intro to Apache ShiroIntro to Apache Shiro
Intro to Apache Shiro
 
Lateral Movement - Phreaknik 2016
Lateral Movement - Phreaknik 2016Lateral Movement - Phreaknik 2016
Lateral Movement - Phreaknik 2016
 
Codetainer: a Docker-based browser code 'sandbox'
Codetainer: a Docker-based browser code 'sandbox'Codetainer: a Docker-based browser code 'sandbox'
Codetainer: a Docker-based browser code 'sandbox'
 
Rails Security
Rails SecurityRails Security
Rails Security
 
Lateral Movement: How attackers quietly traverse your Network
Lateral Movement: How attackers quietly traverse your NetworkLateral Movement: How attackers quietly traverse your Network
Lateral Movement: How attackers quietly traverse your Network
 
Lateral Movement - Hacker Halted 2016
Lateral Movement - Hacker Halted 2016Lateral Movement - Hacker Halted 2016
Lateral Movement - Hacker Halted 2016
 
Securing Cassandra The Right Way
Securing Cassandra The Right WaySecuring Cassandra The Right Way
Securing Cassandra The Right Way
 

Plus de fangjiafu

Create user to_sysdba
Create user to_sysdbaCreate user to_sysdba
Create user to_sysdbafangjiafu
 
Presentation nix
Presentation nixPresentation nix
Presentation nixfangjiafu
 
Layer 7 ddos
Layer 7 ddosLayer 7 ddos
Layer 7 ddosfangjiafu
 
Tlsoptimizationprint 120224194603-phpapp02
Tlsoptimizationprint 120224194603-phpapp02Tlsoptimizationprint 120224194603-phpapp02
Tlsoptimizationprint 120224194603-phpapp02fangjiafu
 
Presentation nix
Presentation nixPresentation nix
Presentation nixfangjiafu
 
Proper passwordhashing
Proper passwordhashingProper passwordhashing
Proper passwordhashingfangjiafu
 
Burp suite injection中的应用by小冰
Burp suite injection中的应用by小冰Burp suite injection中的应用by小冰
Burp suite injection中的应用by小冰fangjiafu
 
2008 07-24 kwpm-threads_and_synchronization
2008 07-24 kwpm-threads_and_synchronization2008 07-24 kwpm-threads_and_synchronization
2008 07-24 kwpm-threads_and_synchronizationfangjiafu
 
Network security
Network securityNetwork security
Network securityfangjiafu
 
Cloud computing security
Cloud computing securityCloud computing security
Cloud computing securityfangjiafu
 
Layer one 2011-sam-bowne-layer-7-dos
Layer one 2011-sam-bowne-layer-7-dosLayer one 2011-sam-bowne-layer-7-dos
Layer one 2011-sam-bowne-layer-7-dosfangjiafu
 
Sqlmap readme
Sqlmap readmeSqlmap readme
Sqlmap readmefangjiafu
 

Plus de fangjiafu (20)

Create user to_sysdba
Create user to_sysdbaCreate user to_sysdba
Create user to_sysdba
 
Presentation nix
Presentation nixPresentation nix
Presentation nix
 
Layer 7 ddos
Layer 7 ddosLayer 7 ddos
Layer 7 ddos
 
Tlsoptimizationprint 120224194603-phpapp02
Tlsoptimizationprint 120224194603-phpapp02Tlsoptimizationprint 120224194603-phpapp02
Tlsoptimizationprint 120224194603-phpapp02
 
Crypto hlug
Crypto hlugCrypto hlug
Crypto hlug
 
Fp
FpFp
Fp
 
Presentation nix
Presentation nixPresentation nix
Presentation nix
 
Rr 7944
Rr 7944Rr 7944
Rr 7944
 
Proper passwordhashing
Proper passwordhashingProper passwordhashing
Proper passwordhashing
 
Burp suite injection中的应用by小冰
Burp suite injection中的应用by小冰Burp suite injection中的应用by小冰
Burp suite injection中的应用by小冰
 
Oech03
Oech03Oech03
Oech03
 
2008 07-24 kwpm-threads_and_synchronization
2008 07-24 kwpm-threads_and_synchronization2008 07-24 kwpm-threads_and_synchronization
2008 07-24 kwpm-threads_and_synchronization
 
Unit07
Unit07Unit07
Unit07
 
Unit05
Unit05Unit05
Unit05
 
Network security
Network securityNetwork security
Network security
 
Ids
IdsIds
Ids
 
Cloud computing security
Cloud computing securityCloud computing security
Cloud computing security
 
Layer one 2011-sam-bowne-layer-7-dos
Layer one 2011-sam-bowne-layer-7-dosLayer one 2011-sam-bowne-layer-7-dos
Layer one 2011-sam-bowne-layer-7-dos
 
Sqlmap readme
Sqlmap readmeSqlmap readme
Sqlmap readme
 
Wisr2011 en
Wisr2011 enWisr2011 en
Wisr2011 en
 

Dernier

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Visualising and forecasting stocks using Dash
Visualising and forecasting stocks using DashVisualising and forecasting stocks using Dash
Visualising and forecasting stocks using Dashnarutouzumaki53779
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 

Dernier (20)

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Visualising and forecasting stocks using Dash
Visualising and forecasting stocks using DashVisualising and forecasting stocks using Dash
Visualising and forecasting stocks using Dash
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 

Wce internals rooted_con2011_ampliasecurity

  • 1. WCE Internals Hernan Ochoa (hernan@ampliasecurity.com)
  • 2. What is WCE? • Windows Credentials Editor v1.0 • Manipulates Windows Logon Sessions • Evolution of the Pass-the-Hash Toolkit (also written by me) • WCE v1.1 to be published after this is over 
  • 3. WCE features • Dump in-memory credentials of logon sessions – Lists in-memory logon sessions • Dumps in-memory username, domain, LM & NT hashes • current, future and terminated (…) – Great to ‘steal’ credentials not stored locally
  • 4. WCE features • Pass-The-Hash – Change/delete NTLM credentials of logon sessions – Create new logon sessions and associate arbitrary NTLM credentials
  • 5. WCE features • Does not require code injection to dump in- memory credentials (v1.1) – No need to run code inside LSASS.EXE – Can locate, list and decrypt Logon Sessions and NTLM credentials just by reading memory
  • 6. WCE features • Single executable (wce.exe) – Easier to use, upload, etc. • Supports – Windows XP – Windows 2003 – Windows Vista – Windows 7 – Windows 2008
  • 7. How does it work? • Windows NT Logon and authentication model Logon LSA Processes Authentication Packages
  • 8. Windows NT Logon and Authentication Model WINLOGON.EXE LSA AUTH API (LSASRV.DLL) MSV1_0.DLL (NTLM AUTH PKG) … LSASS.EXE
  • 9. Windows NT Logon and Authentication Model: NTLM WINLOGON.EXE NTLM CREDS msv1_0.dll!LsaApLogonUser/Ex/Ex2() Logon • Authenticates user Session • Create logon session (LUID) • Add Credentials to Session LSASS.EXE
  • 10. Logon Sessions  Credentials Logon Session Process (LUID) NTLM CREDENTIALS
  • 11. Implementation: two possible ways… 'Use Auth Package API’ Method ‘Read LSASS Memory’ Method (less safe) (very safe) • List LUIDs • Read LSASS Memory • Run code inside LSASS.EXE • Learn inner workings • Call MSV1_0.DLL Functions • Undocumented • AddPrimaryCredential structures • GetPrimaryCredentials • List Logon Sessions • DeletePrimaryCredential • Find keys and friends • No need to encrypt or decrypt • Decrypt/Encrypt credentials credentials • OS/Version ~independent • OS/Version dependent
  • 12. Initialization of auth packages Loads authentication packages and LSASS.EXE calls <authpkg>.dll!LsaApInitializePackage • For Example, msv1_0.dll!LsaApInitializepackage() NTSTATUS LsaApInitializePackage( __in ULONG AuthenticationPackageId, __in PLSA_DISPATCH_TABLE LsaDispatchTable, __in_opt PLSA_STRING Database, __in_opt PLSA_STRING Confidentiality, __out PLSA_STRING *AuthenticationPackageName );
  • 13. Functions provided to auth packages typedef struct LSA_DISPATCH_TABLE { PLSA_CREATE_LOGON_SESSION CreateLogonSession; PLSA_DELETE_LOGON_SESSION DeleteLogonSession; PLSA_ADD_CREDENTIAL AddCredential; PLSA_GET_CREDENTIALS GetCredentials; PLSA_DELETE_CREDENTIAL DeleteCredential; PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap; PLSA_FREE_LSA_HEAP FreeLsaHeap; PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer; PLSA_FREE_CLIENT_BUFFER FreeClientBuffer; PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer; PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer; } LSA_DISPATCH_TABLE, *PLSA_DISPATCH_TABLE;
  • 14. Functions handling credentials NTSTATUS AddCredential( __in PLUID LogonId, __in ULONG AuthenticationPackage, __in PLSA_STRING PrimaryKeyValue, __in PLSA_STRING Credentials );
  • 15. Functions handling credentials NTSTATUS GetCredentials( __in PLUID LogonId, __in ULONG AuthenticationPackage, __inout PULONG QueryContext, __in BOOLEAN RetrieveAllCredentials, __inout PLSA_STRING PrimaryKeyValue, __out PULONG PrimaryKeyLength, __out PLSA_STRING Credentials );
  • 16. Functions handling credentials NTSTATUS DeleteCredential( __in PLUID LogonId, __in ULONG AuthenticationPackage, __in PLSA_STRING PrimaryKeyValue );
  • 17. Windows NT Logon and Authentication Model: NTLM in detail WINLOGON.EXE LUID luid = LsaLogonUser( …,MSV1_0_PACKAGE_ID,… ) msv1_0.dll!LsaApLogonUser/Ex/Ex2() • Create logon session • Authenticates against local sam or AD • msv1_0.dll!NlpAddPrimaryAddCredential(LUID, [username, domain, LM/NT hashes],…) • Lsasrv.dll!AddCredential(LUID,…)
  • 18. 'Use Auth Implementation: Package API’ Method Summary • Find by ‘signatures’ and heuristics • MSV1_0.DLL!NlpAddPrimaryCredential • MSV1_0.DLL!NlpDeletePrimaryCredential • MSV1_0.DLL!NlpGetPrimaryCredential • Run code inside LSASS.EXE • Call *PrimaryCredential functions • LSASRV.DLL functions are not called directly, eg: • MSV1_0.DLL!NlpAddPrimaryCredential() • LSASRV.DLL!AddCredential() • No need to encrypt/decrypt credentials
  • 19. 'Use Auth Implementation: Package API’ Method Credentials Block Format • MSV1_0.DLL!NlpAddPrimaryCredential(PLUID pluid, BYTE* ptrtoCreds, DWORD dwCredsSize); • MSV1_0.DLL!NlpDeletePrimaryCredential(PLUID pluid); • MSV1_0.DLL!NlpGetPrimaryCredential(PLUID pluid, DWORD* ptrtoCreds, DWORD whatever); ptrtoCreds ?
  • 20. 'Use Auth Implementation: Package API’ Credentials Block Format Method ptrtoCreds typedef struct { UNICODE_STR ustr_domain; UNICODE_STR ustr_username; BYTE NThash[16]; BYTE LMhash[16]; BYTE Udomain[MAX_DOMAIN_LEN]; BYTE Uuser[MAX_USERNAME_LEN]; } CREDSBLOCK;
  • 21. 'Use Auth Package API’ Implementation: Method Credentials Block Format ptrtoCreds +00h 000C000D +04h 00000030 +08h 00080009 +0Ch 0000003C +10h 11111111111111111111111111111111 +20h 22222222222222222222222222222222 +30h D0O0M0A0IN00 +3Ch T0E0S0T00
  • 22. 'Use Auth Package Implementation: API’ Method working with Session Isolation
  • 23. 'Use Auth Package Implementation: API’ Method working with Session Isolation Inject code LSASS.EXE WCE.EXE INJECTED CODE Call msv1_0.dll!NlpAdd PrimaryCredential Etc. Session 1 Session 0
  • 24. 'Use Auth Package Implementation: API’ working with Session Isolation Method
  • 25. 'Use Auth Package Implementation: API’ working with Session Isolation Method
  • 26. 'Use Auth Package Implementation: API’ working with Session Isolation Method
  • 27. 'Use Auth Package Implementation: API’ Method working with Session Isolation (Note: CreateRemoteThread() is not the the only way to inject & run code...)
  • 28. 'Use Auth Package Implementation: API’ Method working with Session Isolation • Windows Vista/7/2008 • NTDLL.DLL!NtCreateThreadEx • Windows XP/2003 • RDP / Terminal Services • Create a Windows Service and do everything there • WCE.EXE also acts as a Windows Service • Installs, starts, stops and removes itself • IPC via Named Pipe
  • 29. ‘Read LSASS Memory’ Implementation Method • No need to run code inside LSASS.EXE (SUPER SAFE!) • ReadProcessMemory() only! • Reverse engineer inner workings of LSASS.EXE (LSASRV.DLL) • Structures used internally to hold logon sessions • Structures used internally to hold credentials • Structures used internally to hold NTLM Hashes • Decrypt credentials • Find keys • Algorithm • Anything else needed to decrypt (e.g.: IV)
  • 30. ‘Read LSASS Implementation: Memory’ Logon sessions & credentials structures Method LSASRV.DLL!LogonSessionList LSASRV.DLL!LogonSessionListCount SESSION_ENTRY NEXT PREV … UserLen UserPtr DomainLen DomainPtr … PtrToCreds ? AuthPkgId PtrToCreds CREDS_ENTRY CREDS_HASH_ENTRY ? PrimaryLen PrimaryPtr HashesLen HashesPtr NTLM LM Domain User DomainLen DomainOff userLen userOff … hash hash Name Name NTLM_CREDS_BLOCK (encrypted)
  • 31. ‘Read LSASS Implementation: Memory’ Method changes in SESSION_ENTRY Windows XP/2003 Windows Vista/7/2008 struct SESSION_ENTRY { struct SESSION_ENTRY { DWORD nextEntry; DWORD nextEntry; DWORD prevEntry; DWORD prevEntry; DWORD unk1; DWORD UNKNOWN[18]; DWORD unk2; DWORD userSize; DWORD userSize; DWORD userNamePtrUnicode; DWORD machineSize; DWORD userNamePtrUnicode; DWORD machinePtrUnicode; DWORD machineSize; … DWORD machinePtrUnicode; …. +0x48 DWORD PtrToCreds; +0x88 DWORD PtrToCreds; }; };
  • 32. Implementation: LsaEncryptMemory() Windows XP/2003 Windows Vista/7/2008 Lsasrv.dll!LsaEncryptMemory() NTLM_CREDS_BLOCK • Encrypted with desX-CBC or RC4 • Encrypted with 3DES-CBC or AES-128-CFB • If mod(size/8) == 0 => desX-cbc • If mod(size/8) == 0 => 3DES-CBC • Otherwise use RC4 • Otherwise use 3DES-CBC • Encrypted with desX-CBC • Encrypted with 3DES-CBC
  • 33. Implementation lsasrv.dll!LsaInitializeProtectedMemory (XP/2003) 0 190h VirtualAlloc() 90h 8 8 8 cbRandomKey = 100h pDESXTable pRandomKey struct DESXTable { SystemFunction036( byte byte inWhitening[8]; Feedback[8],8) byte outWhitening[8]; DESTable desTable; } desxkey( pDESXTable , pRandomKey ) struct DESTable { unsigned long keys[16][2]; } SystemFunction036( pRandomKey, cbRandomKey )
  • 34. Implementation lsasrv.dll!LsaInitializeProtectedMemory (Vista/7/2008) h3DesProvider = BCryptOpenAlgorithmProvider( ) hAesProvider = BCryptOpenAlgorithmProvider( ) BCryptSetProperty( h3DesProvider, "CBCMode" ) BCryptSetProperty( hAesProvider, "CFBMode" ) BCryptGetProperty( h3DesProvider, "ObjectLength" ) BCryptGetProperty( hAesProvider, "ObjectLength" ) BCryptGenRandom( h3DesProvider, 24 ) h3DesKey = BCryptGenerateSymmetricKey( h3DesProvider, 24 ) BCryptGenRandom( hAesProvider, 16 ) hAesKey = BCryptGenerateSymmetricKey( hAesProvider, 16 ) BCryptGenRandom( InitializationVector, 16 )
  • 35. Implementation: crypto functions used Windows XP/2003 Windows Vista/7/2008 • Uses custom desX-CBC • Uses Cryptography API: Next implementation Generation (CNG) – Located in LSASRV.DLL • Exported by BCRYPT.DLL – Is not an API • BCryptOpenAlgorithmProvider – Not exported by any Win32 • BCryptSetProperty / DLL BCryptGetProperty • BCryptGenRandom • BCryptGenerateSymmetricKey • BCryptEncrypt / BCryptDecrypt
  • 36. Implementation • desX-cbc ‘trick’ – ‘Reuse’ LsaEncryptMemory CODE!LSASRV.DLL LsaEncrptMemory() DATA DATA IV, DESXTABLE IV, DESXTABLE LSASRV.DLL LSASRV.DLL LSASS.EXE PROCESS.EXE
  • 37. Implementation: pseudo-code (Vista/7/2008) LSASRV.DLL!LsaInitializeProtectedMemory(..) { … h3DesKey = BCryptGenerateSymmetricKey( BCryptGenRandom(24 bytes) ); … hAesKey = BCryptGenerateSymmetricKey(BCryptGenRandom(16 bytes)) … IV = BCryptGenRandom(16 bytes) }
  • 38. Implementation Finding the encryption key (Vista/7/2008) LSASRV.DLL!LsaInitializeProtected Memory() NTSTATUS WINAPI BCryptGenerateSymmetricKey( __inout BCRYPT_ALG_HANDLE hAlgorithm, __out BCRYPT_KEY_HANDLE *phKey, __out_opt PUCHAR pbKeyObject, __in ULONG cbKeyObject, __in PUCHAR pbSecret, __in ULONG cbSecret, __in ULONG dwFlags );
  • 39. Implementation Finding the encryption key (Vista/7/2008) • BCRYPT_KEY_HANDLE hKey – hKey = Pointer to Memory Block (BLOB) – hKey + 0x3C => encryption key • To extract key, read from LSASS.EXE(LSASRV.DLL) – ((unsigned char*)h3DesKey)+0x3C – ((unsigned char*))hAesKey)+0x3C
  • 40. Implementation Finding the encryption key (Vista/7/2008) • Actually, offset changes between OSes – hKey + 0x3C => encryption key (Win7) – hKey + 0x2C => encryption key (Win2008) • To be safe, I ‘discover’ the offset at runtime – I wrote a custom function for that ‘KeyDiscoverOffset()’
  • 41. Implementation Finding the encryption key (Vista/7/2008) • KeyDiscoverOffset() – Uses CNG API to create key object with hard-coded key – Look for hard-coded key inside BLOB pointed to by BCRYPT_KEY_HANDLE BCRYPT_KEY_HANDLE hKey +0h hKey = +3Ch KKKKKKKK… BCryptGenerateSymmetricKey(...,”K KKKKKKK…”) +...h
  • 42. Implementation Finding the IV (Vista/7/2008) • IV is also needed • To extract IV – Read IV from LSASS.EXE (LSASRV.DLL) memory – Symbol ‘InitializationVector’ • With IV and Key, just use CNG – BCryptDecrypt and friends – No need to run code inside LSASS.EXE
  • 43. Implementation: Addresses Needed Windows XP/2003 Windows Vista/7/2008 • LsaLogonSessionList • LsaLogonSessionList • LsaLogonSessionListCount • LsaLogonSessionListCount • DESXTable • h3DesKey • Feedback • InitializationVector • LsaEncryptMemory
  • 44. Implementation: Addresses Needed • Database of addresses • ID by SHA1 hash of LSASRV.DLL • Yes, addresses still an issue.. • But .. • Getlsasrvaddr.exe to the rescue..
  • 45. GetLSASRVADDR.exe • Finds needed addresses automatically • User-friendly • No IDC script, IDA or anything weird like that is needed  • Uses Microsoft symbol server • Requires http outbound connection (!) • Associates addresses and DLLs using SHA1
  • 47. GetLSASRVADDR.exe • Could be integrated with WCE but.. • The outbound connection might be an issue • huge not-there-by-default DLLs needed • Symsrv.dll and dbghelp.dll (new version, not the default one) • Could implement own version of ‘symbol server’ protocol • Or perhaps it is best to use heuristics..
  • 48. Implementation: ASLR and Windows Vista/7/2008 • LSASRV.DLL addresses and ASLR – Not an issue.. – To locate symbols don’t use hard-coded addresses – Use Offsets instead – ASLR is just at boot time – Get current LSASRV.DLL Base Address at run-time and add offset
  • 49. WCE execution flow (simplified) List READ START END Creds? MEM XP/2003 Install/Run/Use ? Vista/7 INJECT WCE Service /2008 CODE CurSessionID == LSASessionID?
  • 50. WCE vs PTH Feature WCE PTH Supports Windows Vista/7/2008 YES NO Single executable YES NO (many executables, need to upload dll, etc) Delete NTLM Credentials YES NO Works with session isolation YES NO (e.g.: via RDP) Programmatic discovery of new YES NO LSASRV addresses (via getlsasrvaddr) Seamlessly chooses code injection or YES NO reading from memory
  • 51. Conclusions • WCE v1.1 – More features and OSes supported – Works via RDP/Terminal Services – No code injection needed – Better solution for ‘addresses issue’ – ‘zombie’ logon sessions and credentials still around in Windows 7 and family.. – Download WCE v1.1! • http://www.ampliasecurity.com/research/wce_v1_1.tgz
  • 52. ‘zombie’ logon sessions and credentials NTLM CREDS Logon Session RDP/Terminal Services connection Domain Admin Some Server (e.g.: backup server nobody cares about) Attacker
  • 53. Preguntas? Gracias! Hernan Ochoa (hernan@ampliasecurity.com) http://www.twitter.com/hernano http://www.twitter.com/ampliasecurity http://www.ampliasecurity.com/blog/