Etkinlikleri Güvenli Bir Şekilde Edinme
Geçici ve kalıcı tüketicilerin olay teslimini güvenli hale getirmek için farklı yöntemleri vardır.
Bu konuda aşağıdaki bölümler ele alınmıştır:
- Geçici Tüketicilerin Güvenliğini Sağlama
- kalıcı tüketicilerin güvenliğini sağlama
- Kalıcı Aboneliğin Güvenliğini Sağlama
- Administrator-Only SD Ayarlama
- Etkinlik Sağlayıcısının Kimliğine Bürünme
- SID'ler ve Kalıcı Abonelikler
- Alan Hesaplarını Kullanarak Kalıcı Abonelikler Oluşturma
- İlgili konular
Geçici Tüketicilerin Güvenliğini Sağlama
geçici tüketiciler sistem yeniden başlatılana veya WMI durdurulana kadar çalışır ancak belirli bir olay tetiklendiğinde başlatılamaz. Örneğin, SWbemServices.ExecNotificationQueryAsync çağrısı geçici bir tüketici oluşturur.
SWbemServices.ExecNotificationQuery veya IWbemServices::ExecNotificationQuery çağrıları geçici olay tüketicileri oluşturur. Geçici tüketiciler, oluşturdukları etkinlik hedefi 'e kimlerin olay sağladığını denetleyemez.
ExecNotificationQuery yöntemlerine yönelik çağrılar senkron, yarı senkronveya asenkron olarak yapılabilir. Örneğin, SWbemServices.ExecNotificationQuery, iflags parametresinin nasıl ayarlandığına bağlı olarak yarı senkron olarak çağrılabilen senkron bir yöntemdir. SWbemServices.ExecNotificationQueryAsync zaman uyumsuz bir çağrıdır.
Bu çağrıların zaman uyumsuz sürümleri için havuza geri çağırmanın, betiğin yaptığı çağrıyla aynı kimlik doğrulama düzeyinde döndürülmeyebileceğini unutmayın. Bu nedenle, zaman uyumsuz çağrılar yerine yarı eşzamanlı çağrılar kullanmanız önerilir. Asenkron iletişime ihtiyacınız varsa, Bir Yöntemi Çağırma ve Bir Asenkron Çağrıda Güvenliği Ayarlamakonularına bakın.
Betik aboneleri, betik tarafından oluşturulan havuza olay sağlamak için bir olay sağlayıcısının erişim haklarını denetleyemez. Bu nedenle, SWbemServices.ExecNotificationQuery çağrıları için yarı zaman uyumsuz biçimi ve belirli güvenlik ayarlarını kullanmak önerilir. Daha fazla bilgi almak için bkz. VBScript ile Yarı Eşzamanlı Çağrı Yapma.
Kalıcı Tüketicilerin Güvenliğini Sağlama
kalıcı tüketici, işletim sistemi yeniden başlatıldıktan sonra kalıcı olacak bir olay sağlayıcısından gelen olaylara kalıcı bir aboneliğe sahiptir. Kalıcı tüketicileri destekleyen bir etkinlik sağlayıcısı, bir etkinlik tüketici sağlayıcısı'dir. Olay gerçekleştiğinde olay sağlayıcısı çalışmıyorsa, WMI olayları teslim etmesi gerektiğinde sağlayıcıyı başlatır. WMI, tüketici sağlayıcısı __Win32Provider örneğini tüketici sağlayıcısı tarafından tanımlanan mantıksal tüketici sınıfı ilişkilendiren __EventConsumerProviderRegistration örneğine göre olayların hangi tüketici sağlayıcısına teslim edilmesi gerektiğini tanımlar. Tüketici sağlayıcılarının rolü hakkında daha fazla bilgi için bkz. Bir Etkinlik Tüketici Sağlayıcısını Yazma.
Kalıcı tüketiciler onlara kimlerin olay gönderdiğini denetleyebiliyor ve olay sağlayıcıları da olaylarına kimlerin erişebileceğini denetleyebiliyor.
İstemci betikleri ve uygulamaları, bir aboneliğin parçası olarak mantıksal tüketici sınıfının örneklerini oluşturur. Mantıksal tüketici sınıfı, olayın hangi bilgileri içerdiğini, istemcinin olayla neler yapabileceğini ve olayın nasıl teslim edilir olduğunu tanımlar.
WMI Standart Tüketici Sınıfları mantıksal tüketici sınıflarının rolüne örnekler sağlar. Daha fazla bilgi için bkz. Standart Tüketicilerle Olayları İzleme ve Yanıtlama.
Kalıcı Aboneliğin Güvenliğini Sağlama
Kalıcı abonelikler WMI'da güvenlik sorunlarına neden olma potansiyeli daha yüksektir ve bu nedenle aşağıdaki güvenlik gereksinimlerine sahiptir:
Mantıksal tüketici örneği, __EventFilterve __FilterToConsumerBinding örnekleri, CreatorSID özelliğinde aynı güvenlik tanımlayıcısına (SID) sahip olmalıdır. Daha fazla bilgi için bkz. Kalıcı bir aboneliğin tüm örneklerinde aynı SID'yi tutma.
Aboneliği oluşturan hesap, yerel yönetici ayrıcalıklarına sahip bir etki alanı hesabı veya yerel Yöneticiler grup hesabı olmalıdır. Administrators grubu SID'sinin kullanılması, ağ bağlantısı kesilmiş olsa bile aboneliğin yerel bilgisayarda çalışmaya devam etmesini sağlar. Etki alanı hesabı kullanmak kullanıcının tam olarak tanımlanmasını sağlar.
Ancak, bilgisayar bağlı değilse ve hesap oluşturma bir etki alanı hesabıysa, WMI hesabın kimliğini doğrulayamadığından tüketici başarısız olur. Abonelik hatasını önlemek için, bilgisayar ağ bağlantısından kesilirse, bir abonelikte Administrators grubu SID'sini kullanın. Bu durumda LocalSystem hesabının etki alanındaki grup üyeliği verilerine erişebildiğinden emin olmanız gerekir. Bazı olay tüketici sağlayıcıları özellikle yüksek güvenlik gereksinimlerine sahiptir, çünkü sahte bir abonelik büyük zarara neden olabilir. Örnekler standart tüketicilerdir, ActiveScriptEventConsumer ve CommandLineEventConsumer.
Kalıcı aboneliği yalnızca belirli olay sağlayıcısı kimliklerinden gelen olayları kabul etmek üzere yapılandırabilirsiniz. __EventFilter örneğinin EventAccess özelliğindeki güvenlik tanımlayıcısını olay sağlayıcısı kimliklerine ayarlayın. WMI, sağlayıcının WBEM_RIGHT_PUBLISH erişimi olup olmadığını belirlemek için olay sağlayıcısının kimliğini güvenlik tanımlayıcısı ile karşılaştırır. Daha fazla bilgi için bkz. WMI Güvenlik Sabitleri.
Filtre olay sağlayıcısı kimliğine erişime izin veriyorsa, olaya da güvenir. Bu, olayı alan tüketicinin temsilcili bir olay oluşturmasına olanak tanır.
NotEventAccess güvenlik tanımlayıcısı için varsayılan değer, herkese erişim sağlayan NULL'dir. daha iyi olay güvenliği için __EventFilter abonelik örneğinde erişimi sınırlamak önerilir.
Administrator-Only SD ayarlama
Aşağıdaki C++ kod örneği, __EventFilter örneğinde yalnızca yönetici güvenlik tanımlayıcısı oluşturur. Bu örnek, güvenlik tanımlayıcısını Güvenlik Tanımlayıcısı Tanım Dili (SDDL) kullanarak oluşturur. WBEM_RIGHT_SUBSCRIBEhakkında daha fazla bilgi için bkz. WMI Güvenlik Sabitleri.
// Create SD that allows only administrators
// to send events to this filter.
// The SDDL settings are O:BAG:BAD:(A;;0x80;;;BA)
// Set the EventAccess property in the
// IWbemClassObject of the __EventFilter instance.
long lMask = WBEM_RIGHT_PUBLISH;
WCHAR wBuf[MAX_PATH];
_ltow( lMask, wBuf, 16 );
HRESULT hRes = pEventFilterInstance->Put( L"EventAccess", 0,
&_variant_t( L"O:BAG:BAD:(A;;0x80;;;BA)" ), NULL );
Önceki kod örneği için aşağıdaki başvuru ve #include deyimleri gerekir.
#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>
#pragma comment(lib, "wbemuuid.lib")
Olay Sağlayıcısı Kimliğine Bürünme
Kalıcı bir tüketicinin olayı işlemek için olay sağlayıcısının kimliğine bürünmeye ihtiyacı olabilir. Kalıcı tüketiciler yalnızca aşağıdaki koşullar mevcut olduğunda olay sağlayıcısının kimliğine bürünebilir:
- __FilterToConsumerBinding örneğinde MaintainSecurityContext özelliği Trueolarak ayarlanmıştır.
- Bir olay, sağlayıcının olayı oluştururken içinde olduğu güvenlik bağlamında teslim edilir. Yalnızca DLL olarak uygulanan bir tüketici, süreç içi tüketici, sağlayıcının güvenlik bağlamında olayları alabilir. İşlem içi sağlayıcıların ve tüketicilerin güvenliği hakkında daha fazla bilgi için bkz. Sağlayıcı Barındırma ve Güvenlik.
- Olay sağlayıcısı, kimliğe bürünme işlemine izin veren bir işlemde çalışıyor.
Tüketici işlemini çalıştıran hesabın WMI deposuna (CIM deposu olarak da bilinir) FULL_WRITE erişimi olmalıdır. Abonelikte, __FilterToConsumerBinding, __EventConsumerve __EventFilter örnekleri CreatorSID özelliğinde aynı güvenlik tanımlayıcısı (SID) değerine sahip olmalıdır. WMI, SID'yi her örnek için CreatorSID depolar.
SID'ler ve Kalıcı Abonelikler
Bağlama, tüketici ve filtre aynı kullanıcı tarafından oluşturulmadığında kalıcı abonelik çalışmaz; bu da __FilterToConsumerBinding, __EventConsumerve __EventFilterCreatorSID özelliğinde aynı güvenlik tanımlayıcısı (SID) değerine sahip olması gerektiği anlamına gelir. Windows Yönetim Araçları (WMI) bu değeri depolar.
Etki Alanı Hesaplarını Kullanarak Kalıcı Abonelikler Oluşturma
Kalıcı abonelikler oluşturmak için etki alanı hesapları kullanılırken çeşitli sorunlar göz önünde bulundurulmalıdır. Hiçbir kullanıcı oturum açmadığında her kalıcı abonelik çalışmaya devam etmelidir, bu da yerleşik LocalSystem hesabı altında çalıştığı anlamına gelir.
Etki alanı kullanıcısı, güvenlik açısından hassas tüketiciler için kalıcı bir aboneliğin oluşturucusuysa (ActiveScriptEventConsumer, CommandLineEventConsumer), WMI, __EventFilter sınıfının, __FilterToConsumerBinding sınıfının CreatorSID özelliğinin ve tüketici örneklerinin yerel Yöneticiler grubunun üyesi olan bir kullanıcıya ait olup olmadığını doğrular.
Aşağıdaki kod örneği, CreatorSID özelliğini nasıl belirtebileceğinizi gösterir.
instance of __EventFilter as $FILTER
{
// this is the Administrators SID in array of bytes format
CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0};
// Add filter code here ...
}
instance of ActiveScriptEventConsumer as $CONSUMER
{
CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0};
// Add consumer code here ...
}
instance of __FilterToConsumerBinding
{
CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0};
Consumer = $CONSUMER;
Filter = $FILTER;
// Add binding code here ...
}
Etki alanları arası durumlar için Kimliği Doğrulanmış Kullanıcılar'ı "Windows Yetkilendirme Erişim Grubu"na ekleyin.
İlgili konular