Auswählen von Sicherheits-QOS-Optionen
Die QOS-Sicherheitsoptionen werden als Teil des SecurityQOS-Parameters übergeben, der der RpcBindingSetAuthInfoEx-Funktion übergeben wird. Verwenden Sie die folgenden bewährten Methoden.
Verwenden der gegenseitigen Authentifizierung
Echte gegenseitige Authentifizierung ist nur für bestimmte Sicherheitsanbieter verfügbar: Aushandeln (beim Aushandeln von Kerberos), Kerberos und Schannel. NTLM unterstützt keine gegenseitige Authentifizierung. Die Verwendung der gegenseitigen Authentifizierung erfordert, dass ein wohlgeformter Serverprinzipalname angegeben wird. Viele Entwickler verwenden die folgende fehlerhafte Sicherheitsmethode: Der Server wird aufgerufen, um nach seinem Prinzipalnamen (RpcMgmtInqServerPrincName)zu fragen, und dann fragen sie blind nach gegenseitiger Authentifizierung mit diesem Prinzipalnamen. Dieser Ansatz unterbricht die gesamte Idee der gegenseitigen Authentifizierung. Die Idee der gegenseitigen Authentifizierung ist, dass nur bestimmte Server aufgerufen werden, da sie vertrauenswürdig sind, um Ihre Daten zu analysieren und zu verarbeiten. Mithilfe der soeben beschriebenen fehlerhaften Sicherheitsmaßnahmen geben Entwickler ihre Daten an alle Personen weiter, die so intelligent sind, dass sie ihren Namen zurückgeben können.
Wenn die Clientsoftware beispielsweise nur einen Server aufrufen soll, der unter Den Konten von Joe, Pete oder Alice ausgeführt wird, sollte die RpcMgmtInqServerPrincName-Funktion aufgerufen werden, und der zurücksendete Name sollte überprüft werden. Wenn es sich um Joe, Pete oder Alice handelt, sollte die gegenseitige Authentifizierung mit dem Namen des Serverprinzipals angefordert werden. Dadurch wird sichergestellt, dass beide Hälften der Konversation an denselben Prinzipal gehen.
Wenn die Clientsoftware einen Dienst aufrufen soll, der nur unter joes Konto ausgeführt wird, erstellen Sie direkt den Serverprinzipalnamen von Joe, und nehmen Sie den Aufruf vor. Wenn der Server nicht Joe ist, kann der Aufruf einfach nicht ausgeführt werden.
Dienste werden oft als Windows ausgeführt, was bedeutet, dass sie unter dem Computerkonto ausgeführt werden. Die gegenseitige Authentifizierung und Erstellung eines Serverprinzipalnamens wird weiterhin empfohlen.
Verwenden Des niedrigsten Identitätswechseltyps, der dem Aufruf das Durchgehen ermöglicht
Diese bewährte Methode ist ziemlich selbsterklärend. Auch wenn gegenseitige Authentifizierung verwendet wird, sollten Sie dem Server nicht mehr Rechte als nötig geben. Ein legitimer Server wurde möglicherweise kompromittiert, und obwohl die von Ihnen gesendeten Daten in solchen Fällen in die falschen Hände fallen, kann zumindest der Server nicht in Ihrem Namen auf andere Daten im Netzwerk zugreifen. Einige Server lehnen einen Aufruf ab, der nicht über ausreichende Informationen verfügt, um den Aufrufer zu bestimmen und ggf. seine Identität zu ermitteln. Beachten Sie außerdem, dass einige Protokollsequenzen die Sicherheit auf Transportebene unterstützen (ncacn _ np und ncalrpc). In solchen Fällen kann der Server immer die Identität von Ihnen übernehmen, wenn Sie eine ausreichend hohe Identitätswechselebene über den NetworkOptions-Parameter angeben, wenn Sie das Bindungshand handle erstellen.
Schließlich können einige Sicherheitsanbieter oder Transporte ImpersonationType transparent auf eine höhere Ebene als die angegebene ebene erhöhen. Stellen Sie beim Entwickeln eines Programms sicher, dass Sie versuchen, Aufrufe mit dem beabsichtigten ImpersonationType-Wert zu tätigen, und überprüfen Sie, ob Sie einen höheren ImpersonationType-Wert auf dem Server erhalten.