COM+ Security Christof Sprenger Partner Group Microsoft GmbH [email protected].

77
COM+ Security Christof Sprenger Partner Group Microsoft GmbH [email protected]

Transcript of COM+ Security Christof Sprenger Partner Group Microsoft GmbH [email protected].

Page 1: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

COM+ Security

Christof Sprenger

Partner GroupMicrosoft [email protected]

Page 2: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

2

Agenda

1. Security Grundlagen

2. Windows Security Architektur

3. COM+ Security Architektur

4. Do’s & Don’ts

Page 3: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

3

Abschnitt 1

Security Grundlagen

Page 4: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

4

„Definition“

Security ist:

„Definieren und Durchsetzen von Grenzen des Vertrauens “

(defining and enforcing boundaries of trust)

Security ist:

„Definieren und Durchsetzen von Grenzen des Vertrauens “

(defining and enforcing boundaries of trust)

Page 5: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

5

„Definition“

Kurze Definition von Security:

• wer (identity Authentifizierung)

• tut was (Zweck/Absicht)

• mit wem oder was (Privilege Authorisation)

Page 6: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

6

Security Grundlagen: Begriffe

„Principal“ Eine Identität (Sie oder Ihr PC) „Credentials“ Daten um Identität zu

beweisen„Trust“ Den Credentials vertrauten„Authority“ Der, der für Principals bürgt „Privilege“ Das Recht etwas zu tun

Page 7: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

8

Abschnitt 2

Windows Security Architektur

Page 8: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

9

Windows Security Architektur

Authentifizierung

• Access Token

• Security Identifier

• Logon Session

Authorisation

• Privileges / User Rights

• Access Control List (ACL)

• Security Descriptors (SD)

Page 9: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

10

Authentifizierung 1/2

Die Frage ist: “Wer bist du?” „Credentials“ werden beim Logon

überprüft

• Credentials sind: User/Password oder Smartcard

Erfolgreiches Logon erzeugt ein

• eine Logon Session und

• ein Access-Token

Access Token dient als Zutrittsausweis

Page 10: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

11

Authentifizierung 2/2

LogonProcess

(winlogon.exe)

SecuritySubsystem (LSA)

(lsass.exe)

Authenticationpackage

Security Account Manager DB

(SAM)

Win32Subsystem

(system)

CTRL-ALT-DELCheck

Credentials(USER/PASS)

Validate userAdd group info

Logging on...

CreateAccess token

Create processWith access token

RunShell

(explorer.exe)

Page 11: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

12

Access Token Bestandteile

User SID Group SIDs Privileges Default für neue Objekte (z.B. Dateien,

Pipes, Shared Memory ....) Logon Session ID ...

Page 12: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

14

Logon-Sessions 5 Arten von logon-session

SYSTEMEnthält alle Prozesse, die Teil des OS sind

INTERACTIVEFür den interaktiv angemeldeten Benutzer

NETWORKEntsteht durch authentifizierten Zugriff auf den

Rechner über das Netzwerk

SERVICEFür NT Dienste, die mit einem bestimmten

Benutzerkonto konfiguriert wurden

BATCH Für Prozesse die durch die COM Runtime

getartet wurden

Page 13: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

16

Logon Sessions Beispiel

AlicesMachine

Alice‘s interactive logon session

JoesMachine

TedsMachine

Teds‘s interactive logon session

Teds‘s network logon session

Alice‘s network logon session

Alice‘s network logon session

Bob‘s Service logon session

Bob‘s networklogon session

Page 14: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

17

Impersonation Ein (Server-)Prozess verrichtet oft

Arbeit für verschiedene Benutzer Daher kann jedem Thread eine eigenes

Access Token zugeordnet werden Es gibt also zwei Arten von Access

Token

• Primary Token (für Prozesse)

• Impersonation Token (für Threads)

Page 15: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

18

Impersonation im Bild

client.exe

Alice

server.exeJoe

Alice

client.exe

BobBob

Page 16: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

19

Authorization

Frage ist: “Was darfst du tun?” Auch: Access Check oder Access

Control Wird bestimmt durch:

• Art des gewünschten Zugriffs

• Access-Token (des aktuellen Threads)

• Access Control List (ACL) aus dem Security Descriptor des Objekts

Page 17: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

20

Access Control Lists

ACE

DACL

ACE

ACE

ACE

Everyone Read

SYSTEM Full Control

„chrispre“Full Control

Administrators Full Control

Page 18: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

21

Security Descriptor

Owner SID Group SID (POSIX) SACL DACL

• Permitted users

• Permissions

Page 19: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

22

Authorisation im Bild

Process/ThreadOpenSomeObject()

Access-Token

User SID„chrispre”

Group SIDsPrivileges

Token

DACL

SD

ACE„chrispre“: Full

DACL

SRM(Security-Reference-

Monitor)

Access?

SomeObject

Security-DescriptorCheck!

OK!

Page 20: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

23

Netzwerk Authentifizierung Wie entsteht auf einem entfernten

Rechner eine Logon Session, die den Benutzer repräsentiert, der über das Netzwerk zugreift?

Das Kennwort darf nicht einfach über das Netzwerk versendet werden

Die Bits und Bytes, die das Access Token bilden dürfen ebenfalls nicht versendet werden

Page 21: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

24

Client Server

1. Negotiate

2. Challenge

3. Response

4. 5.

NTLM mit Local Accounts

client.exe server.exe

lsass.exe

Page 22: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

25

Server

Authority

Client

NTLM mit Domain Accounts

client.exe server.exe

lsass.exe

0.

1-3

5. 6.

4. 7.

Page 23: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

26

Server

Authority B

Client

NTLM über Domänengrenzen

client.exe server.exe

lsass.exe

Authority A

Domain BDomain A

Page 24: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

27

Client Server

Authority

Kerberos

1. 2.

3.

Page 25: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

28

Abschnitt 3

COM(+) und Security

Page 26: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

29

COM Security Konzepte

Authentifizierung: Wer ist der Client?• RPC und damit COM erlaubt dem Client den Grad

der Authentifizierung einzustellen

Access Control: Darf dieser Client dies tun?• Programmatisch vs. Deklarativ

Identity: Welche Identity nimmt der Client an? Mit welcher Identity läuft der Server?• COM erlaubt es dem Client eine Identity

auszuwählen• COM startet die Server automatisch und erlaubt es

die Identity des Servers auszuwählen

Page 27: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

30

Abschnitt 3.1

Authentifizerung

Page 28: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

31

Auswahl des SSP in COM

Jeder Server-Prozess registriert Security Support Provider (SSP) mit Hilfe von CoInitializeSecurity

• Runtime sorgt dafür, daß Proxies automatisch den passenden SSP verwenden

COM ruft CoInitializeSecurity implizit auf falls “vergessen”

• Beim ersten Marshal oder Unmarshal

• Wählt default SSPs des Rechners

• Defaultwerte sagen: Security ist an

Page 29: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

32

CoInitializeSecurity

HRESULT CoInitializeSecurity( SECURITY_DESCRIPTOR* pSD, DWORD cAuthSvc, SOLE_AUTHENTICATION_SERVICE*

prgAuthSvc, void* pvReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pvReserved2, DWORD dwCapabilities, void* pvReserved3);

Page 30: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

33

Authentication Level

Mit CoInitializeSecurity wird ein „Authentication Level“ gewählt

Dies legt fest wann und/oder wie oft Authentifiziert wird und ob die Daten verschlüsselt werden

Page 31: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

34

RPC_C_AUTHN_LEVEL

RPC_C_AUTHN_LEVEL_NONE Keine Authentifizierung

RPC_C_AUTHN_LEVEL_CONNECT Authentifizierung beim ersten “Kontakt”

RPC_C_AUTHN_LEVEL_CALL Authentifizierung für das erste Packet eines jeden Aufrufs

RPC_C_AUTHN_LEVEL_PACKET Authentifizierung für jedes Packet

RPC_C_AUTHN_LEVEL_PKT_INTEGRITY PACKET + Signatur

RPC_C_AUTHN_LEVEL_PKT_PRIVACY INTEGRITY + Verschlüsselung

Page 32: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

35

Authentication Level

Für den Server ist dies die „low watermark“ für eingehende Aufrufe

Unterhalb dieses Levels werden Aufrufe abgelehnt

• Alle exportierten Interface Pointer bekommen diese „low watermark“ als Hinweis mit

COM Runtime wählt dann den höchsten von

• „low watermark“ des Servers

• Level der bei Aufruf von CoInitializeSecurity im Client angegeben wurde

Page 33: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

36

Proxy und Security

CoInitializeSecurity legt nur den „default authentication level“ für jeden Proxy fest

Die Einstellungen können dann für jeden Proxy angepasst werden.

Dies geht bei dem Standard-Proxy über IClientSecurity

• IClientSecurity wird vom „proxy manager“ implementiert

Page 34: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

37

ServerClient

Stub

Stub

ObjectIFoo

IBaz

Proxy & Stubs (Interceptors)

IClientSecurityProxyManager

ProxyIFoo

IBaz Proxy

Page 35: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

38

IClientSecurityinterface IClientSecurity : Iunknown{ HRESULT QueryBlanket( IUnknown* pProxy, DWORD* pAuthnSvc,DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, void** ppAuthInfo, DWORD* pdwCapabilites );

HRESULT SetBlanket( IUnknown* pProxy, DWORD AuthnSvc, DWORD AuthzSvc, OLECHAR* pServerPrincName, DWORD AuthnLevel, DWORD ImpLevel, void* pAuthInfo, DWORD dwCapabilities );

HRESULT CopyProxy( IUnknown* pProxy, IUnknown** ppCopy );}

Page 36: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

39

Anpassen des Authn Level

HRESULT MakePrivateCall( IBank* pib ){ IClientSecurity* pics = 0; pib->QueryInterface( IID_IClientSecurity,

(void**)&pics );

DWORD nAuthnSvc, nImpLevel; pics->QueryBlanket( pib, &nAuthnSvc, 0, 0, 0, &nImpLevel, 0, 0 ); pics->SetBlanket( pib, nAuthnSvc, 0, 0, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, nImpLevel, 0, 0 ); pics->Release();

pib->SetCreditCardInfo( g_pszCardNum ); pib->Release();}

Page 37: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

40

Authn Level bei Aktivierung

In COM gibt es einige Aufrufe zur Aktivierung von COM Objekten

• CoCreateInstance(Ex)

• CoGetClassObject

• CoGetInstanceFromFile

Der Default Authn Level wird durch CoInitializeSecurity bestimmt

Wie kann der Client den Authn Level festlegen? (Es gibt noch kein IClientSecurity)

Hierzu dient COSERVERINFO und COAUTHINFO

Page 38: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

41

COAUTHINFO

struct COSERVERINFO { DWORD dwReserved1; // mbz WCHAR* pszHostName; COAUTHINFO* pAuthInfo; DWORD dwReserved2; // mbz};

struct COAUTHINFO { DWORD dwAuthnSvc; DWORD dwAuthzSvc; WCHAR* pszServerPrincipalName; DWORD dwAuthnLevel; DWORD dwImpLevel; COAUTHIDENTITY* pAuthIdentityData; DWORD dwCapabilities;};

Page 39: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

42

„Normales“ Vorgehen Server setzt die „low watermark“ auf

CONNECT or NONE (Effizienz) Ein Servers, der den Client

identifizieren muss, setzt mindestens CONNECT

• Z.B. muss ein Server, der nur bestimmte Clients zulässt diese auch unterscheiden können

Server, die anonymen Zugriff erlauben müssen NONE verwenden.

Clients setzen den Authn Level für bestimmte Operationen rauf.

Page 40: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

43

Überprüfen des Authn Level

Ein Server fordert manchmal einen höheren Authentication Level als sonst

• Z.B. um eine PIN oder Kreditkartennummer zu übetragen

Clients können den Level erhöhen Server können dies dann überprüfen IServerSecurity bietet die Möglichkeit

den Kontext des Aufrufs nach dem Authn Level zu fragen

• Hierzu ist auch CoGetCallContext nötig

Page 41: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

44

IServerSecurityHRESULT CoGetCallContext( REFIID iid, void** ppv );

interface IServerSecurity : IUnknown{ HRESULT QueryBlanket( DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, void** pPrivs, DWORD* pCapabilites );

// weitere Methoden ...}

Page 42: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

45

Beispiel QueryBlanket

HRESULT CoBank::SetCreditCardInfo( BSTR pszCardNum ){ // verlange PRIVACY DWORD nAuthnLevel HRESULT hr = CoQueryClientBlanket( 0, 0, 0, &nAuthnLevel, 0, 0, 0 ); // nicht authentifiziert if ( FAILED( hr ) ) return E_ACCESSDENIED;

if ( nAuthnLevel < RPC_C_AUTHN_LEVEL_PRIVACY ) return E_ACCESSDENIED;

// ...}

Page 43: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

46

Abschnitt 3.2

Access Control

Page 44: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

47

Zwei Arten von Authorisation

COM bietet zwei Arten von Zugriffskontrolle

Beide arbeiten auf Prozessebene Access Permissions

• Welcher Benutzer darf in den Server Aufrufe absetzen

Launch Permissions

• Welcher Benutzer kann den Prozess in Folge eines Aktivierungsaufrufes starten

Es ist möglich, dies feiner abgestuft im Programmcode zu machen

Page 45: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

48

Access Permissions

Werden über CoInitializeSecurity gesetzt Der erste Parameter kann in

verschiedenen Arten verwendet werden.

• NULL für unbeschränkten Zugriff

• Ein Interface Pointer vom Typ IAccessControl

• Ein Security Descriptor

• Eine AppID

dwCapabilities (8. Parameter) bestimmt was im Ersten steht

Page 46: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

49

CoInitializeSecurity

HRESULT CoInitializeSecurity( SECURITY_DESCRIPTOR* pSD, DWORD cAuthSvc, SOLE_AUTHENTICATION_SERVICE*

prgAuthSvc, void* pvReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pvReserved2, DWORD dwCapabilities, void* pvReserved3);

Page 47: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

50

Registry Wenn in CoInitializeSecurity eine AppID

verwendet wird, wird die Registry verwendet.

Pro Applikation bzw. AppID• HKCR/AppID/{appid}

• AccessPermission=“01 00 04 80 ..."

Falls dieser Key fehlt• HCLM/Software/Microsoft/Ole

• DefaultAccessPermission=“01 00 04 80 ..."

DCOMCNFG kann die Einträge setzen

Page 48: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

51

Launch Permissions Wer darf einen COM Server starten? CoInitializeSecurity kann nicht verwendet

werden, da der Prozess ja noch nicht läuft Hierfür ist die Registry da

• HKCR/AppID/{appid}

• LaunchPermission=“01 00 04 80 ...”

Falls dieser Key nicht existiert wird ein Default benutzt• HCLM/Software/Microsoft/Ole

• DefaultLaunchPermission=“01 00 04 80 ...”

Mit Hilfe von DCOMCNFG können diese Werte editiert werden

Page 49: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

52

Abschnitt 3.3

Role based security

Page 50: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

53

Access Control in COM ist grob

Launch Permissions pro Applikation Access Permissions pro Prozess Was, wenn man es genauer/feiner

haben möchte?

• Access Control pro Klasse

• Access Control pro Interface

• Access Control pro Methode

Ist möglich, erfordert jedoch viel Code

Page 51: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

54

Feinere Zugriffscontrolle

Wie kann dies programmatisch gemacht werden?

Authn Level ausreichend wählen Jede Methode macht folgendes

• Lade das aktuelle Access Token• Dies geht in COM über

IServerSecurity::ImpersonateClient() und IServerSecurity::RevertToSelf()

• Lade einen Security Descriptor für diese spezielle Methode aus einer DB

• Rufe die API AccessCheck auf und gib einen Fehler zurück das Ergebnis False ist

Page 52: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

55

Impersonation Aufrufinterface IServerSecurity : IUnknown{ HRESULT QueryBlanket( ... ); HRESULT ImpersonateClient(); HRESULT RevertToSelf(); BOOL IsImpersonating();}

HRESULT CoGetCallContext( REFIID iid, void** ppv );

oder

HRESULT CoImpersonateClient();HRESULT CoRevertToSelf();

Page 53: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

56

Deklarative Access Control

Das gleiche kann in COM+ deklarativ gemacht werden

Der Code dazu ist im sogenannten Interceptor Die nötige Information (DACL) dazu steht im

COM Catalog Problem:

• Zur Designzeit stehen die Benutzer nicht fest

• Der Administrator kennt zur Installationszeit die Semantik der Methoden nicht.

• Wer soll also den COM Catalog „füllen“?

Lösung: eine zusätzliche Indirektionsstufe

Page 54: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

57

COM+ Roles

Page 55: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

58

Abschnitt 3.4

Identity

Page 56: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

59

Client Identity

Per Default benutzt der Client das Token des Prozesses für alle ausgehenden Aufrufe.

Thread (impersonation) Tokens werden nicht verwendet

Aber das Verhalten kann man ändern.

Page 57: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

60

Impersonation im Bild

client.exe

Alice

server.exeJoe

Alice

client.exe

BobBob

Page 58: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

61

Per-Proxy Client Identity

Die Identity kann für jeden Proxy verändert werden

interface IClientSecurity : Iunknown { HRESULT QueryBlanket( ... );

HRESULT SetBlanket( IUnknown* pProxy, ..., void* pAuthInfo, DWORD dwCapabilities );

HRESULT CopyProxy( ... );}

Page 59: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

62

Explizit Die Identity kann explizit gesetzt werden

• Für NTLM und Kerberos ist die folgende Struktur zu verwenden (für pAuthInfo in SetBlanket)

struct SEC_WINNT_AUTH_IDENTITY_W {

unsigned short* User;

unsigned long UserLength;

unsigned short* Domain;

unsigned long DomainLength;

unsigned short* Password;

unsigned long PasswordLength;

unsigned long Flags;

};

Page 60: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

63

Cloaking (W2K)

Eine andere Art ist das sogenannte Cloaking

Cloaking inspiziert das aktuelle Thread Token und kopiert die Daten in den Proxy

Aufrufen von IClientSecurity::SetBlanket mit entsprechendem Parameter für dwCapabilities

• EOAC_STATIC_CLOAKING

• EOAC_DYNAMIC_CLOAKING

Page 61: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

64

Aktivierung

Was tun die Aktivierungs-Aufrufe• CoCreateInstanceEx

• CoGetClassObject

• CoGetInstanceFromFile Der COM SCM erzeugt die Objekte

stellvertretend für den Aufrufer• Impersoniert den Client

Nutzt ebenfalls das Process Token Clients habe die Möglichkeit dies mit

Hilfe von COAUTHINFO zu überschreiben

Page 62: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

65

COAUTHINFOstruct COAUTHINFO { DWORD dwAuthnSvc; DWORD dwAuthzSvc; WCHAR* pszServerPrincipalName; DWORD dwAuthnLevel; DWORD dwImpLevel; COAUTHIDENTITY* pAuthIdentityData; DWORD dwCapabilities;};

Page 63: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

66

Client Identity Zusammenfassung

Jeder COM Aufruf nutzt das Process Token als Identität des Aufrufers

Einzelne Interface Proxies können dies überschreiben

• Explizit durch Angabe der Credentials

• Über Cloaking (NT5)

Aktivierung von COM Objekten ebenfalls mit expliziter Angabe einer anderen Identity möglich

• COM SCM impersoniert

Page 64: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

67

Server Identity COM SCM startet den COM Server

Prozess via CreateProcessAsUser CreateProcessAsUser verlangt ein Token Drei Möglichkeiten für dieses Token Welche Möglichkeit verwendet wird steht

in der Registry• HKCR/AppID/{appid}

• RunAs=“…”

Page 65: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

68

“As Activator” RunAs-Key ist nicht vorhanden COM SCM startet den Prozess mit dem Client

Token Client muss dazu authentifiziert werden Jeder Client bekommt einen eigenen Server

Prozess

• Schlecht für die Performance

• Nur sehr schwer möglich Resourcen gemeinsam zu nutzen

Falls es sich um einen Remote Client handelt, hat der Server keine „network credentials“

• Kann mit Delegation in W2K umgangen werden

• Wird allgemein als schlecht angesehen

Page 66: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

69

“Interactive User” RunAs=“Interactive User” COM SCM startet den Prozess mit dem Token

des momentan angemeldeten Benutzers Sehr nützlich fürs Debuggen

• Server hat „network credentials“

• Ein Server Prozess für alle Clients Server ist in der Lage Fenster zu erzeugen

• Z.B. für ASSERT oder MsgBox Nicht besonders nützlich für Release Version Ohne einen angemeldeten Benutzer schlagen

alle Aktivierungsaufrufe fehl. Server Prozess muss mit allen möglichen

Benutzern rechnen

Page 67: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

70

“Distinguished Principal” RunAs=“Authority\Principal „ COM SCM ruft LogonUser auf um ein Token

zu erzeugen. Ideal für Release Version

• Server hat „network credentials“ des ausgewählten Benutzers

• Ein Serverprozess für alle Clients

• Eindeutiger Account erlaubt es die Rechte/Privilegien genau zu kontrollieren

• Läuft auch im Hintergrund Nicht unbedingt für Debugging geeignet

• CoRegisterClassObject macht evtl. Probleme Password wird als „LSA secret“ gespeichert

• Dies muss von Hand aktualisiert werden

Page 68: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

71

Impersonation Level

Es ist möglich die Benutzung des so erhaltenen Tokens einzuschränken

• Anonymous wird nicht unterstützt

• Delegate geht nur mit Kerberos

RPC_C_IMP_LEVEL_ANONYMOUS

RPC_C_IMP_LEVEL_IDENTIFY

RPC_C_IMP_LEVEL_IMPERSONATE

RPC_C_IMP_LEVEL_DELEGATE

Page 69: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

72

CoInitializeSecurity Der Client setzt den Default

Impersonation Level mit CoInitializeSecurity

HRESULT CoInitializeSecurity( SECURITY_DESCRIPTOR* pSD,

DWORD cAuthSvc, SOLE_AUTHENTICATION_SERVICE *prgAuthSvc, void* pvReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pvReserved2, DWORD dwCapabilities, void* pvReserved3);

Page 70: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

73

IClientSecurity & Imp. Level

Der Client kann die Einstellung für jeden Proxy ändern

interface IClientSecurity : IUnknown{ HRESULT QueryBlanket( IUnknown* pProxy, DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, void** ppAuthInfo, DWORD* pCapabilites );

HRESULT SetBlanket( IUnknown* pProxy, DWORD AuthnSvc, DWORD AuthzSvc, OLECHAR* pServerPrincName, DWORD AuthnLevel, DWORD ImpLevel, void* pAuthInfo, DWORD Capabilities );

HRESULT CopyProxy( IUnknown* pProxy, IUnknown** ppCopy );

}

Page 71: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

74

Abschnitt 4

Page 72: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

75

Do’s and Don’ts 1/3

Do

• Sichern Sie Ihre Server ;-)

• Security während (vor) des Designs bedenken

• „Configure Security“• Role Based Security spart Arbeit

• ‚Interactive user‘ fürs Debugging

• ‚This user‘ fürs Deployment

Page 73: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

76

Do’s and Don’ts 2/3

Don´t

• Erfinden Sie kein eigenes “security system”

• Vergessen Sie nicht CoInitializeSecurity() aufzurufen

• Vorsicht bei der Verwendung von Impersonation• Skalierbarkeit

• Versuchen Sie CoInitializeSecurity() >= CONNECT zu vermeiden• Die Authentifizierung des Servers schlägt evtl.

fehl

Page 74: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

77

Do’s and Don’ts 3/3

Don´t

• Versuchen Sie “callbacks” zum Client zu vermeiden (falls möglich)• Falls nötig: CoInitializeSecurity() mit Authn

Level NONE ist die beste Wahl

Page 75: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

78

Fragen?

Presentation Layer

FragenFragen AntwortenAntworten&&

Page 76: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

79

Wo gibt’s weitere Info’s? MSDN online

• http://www.microsoft.com/germany/msdn

MSDN TechTalk-Newsgroup• msnews.microsoft.com

microsoft.public.de.german.techtalk

Web Seiten• COM Security in Practice

• http://msdn.microsoft.com/library/techart/msdn_practicom.htm

• KeithBrown COM Security FAQ• http://www.develop.com/kbrown

• COM Security FAQ• http://support.microsoft.com/

support/kb/articles/Q158/5/08.asp

Page 77: COM+ Security Christof Sprenger Partner Group Microsoft GmbH chrispre@microsoft.com.

80

Wo gibt’s weitere Info’s?

Bücher

• Keith Brown: Programming Windows Security• http://www.develop.com/kbrown

• Don Box: Essential COM

• Solomon, Russinovich: Inside Windows 2000• http://www.sysinternals.com

• Kaufman, Perlman, Spencier:Network Security