Bir masaüstü uygulaması için 'Yönetici Parolası' sağlamanın olası alternatifleri nelerdir?


10

Şu anda 10 yıldır şirketimde kullanılan bir yazılım parçasını yönetiyorum ve yeniden çarpanlarına ayırıyorum. Bu uygulamanın öğelerinden biri, bazı ek / dahili giriş gibi şeylerin yanı sıra giriş sınırlarını kapatma yeteneği sağlayan bir tür yönetici veya güç kullanıcı modudur.

Tarihsel olarak bu mod, Windows sistem dizinindeki belirli bir yere (her ikisi de uygulamaya sabit olarak kodlanmış) özel olarak adlandırılmış bir dosya yerleştirilerek açılmıştı, dosya boş olmasına rağmen 'something.DLL' olarak adlandırılıyor ASCII dosyası değil, bir dll.

Bu yüzden son zamanlarda bazı kodlar ve kullanıcının bu işlevselliği açmak için bir yönetici şifresi girmesine izin veren küçük bir form ekledim. Kullanıcıya özel değil, belirlenmiş bir şifredir. Doğru parola girildiğinde, uygulama kök dizininde bir 'anahtar dosyası' oluşturarak aynı şeyi yapar, böylece bu dosya varsa program yönetici modunda başlayabilir.

Şimdi bu yazılımın çoğunlukla olduğu bölüm müdürü bu fikri çok sevmiyor. Basit, önceden ayarlanmış bir şifremiz varsa kolayca 'dışarı çıkacağını' düşünüyor ve deneyimsiz kullanıcıların bu ekstra özelliklere erişmesini istemiyor.

Benim sorum şu: Bu tür bir erişim sağlamak için biraz daha güvenli olabilecek başka yöntemler var mı? Bu yazılımın bakımı ve yönetimi söz konusu olduğunda neredeyse sadece benim, bu yüzden neredeyse tamamen yerleşik veya otomatik olmayan herhangi bir şey yardımcı olmaz ('lisans anahtarları' için istek göndermek veya buna benzer bir şey gibi).

Notlar: Bu uygulama VB.NET (.NET 4.0) ile yazılmış ve şu anda yeni sürüm tamamlandığında bir kez dağıtım kullanmayı planlıyorum.


1
Birisi, kullanıcıların "deneyimsiz" olan ve olmayan bir karar vermesi gerekir. Bu kararı kim verir? Bu kararları sisteme kim koymak zorunda?
Doc Brown

Yanıtlar:


13

Active Directory'niz varsa, bir Active Directory Grubu üyeliğini test edebilirsiniz:

public bool IsInADGroup(string ADGroupName)
    {
        bool result = false;
        List<string> myGroups = new List<string>();

        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, SystemInformation.UserDomainName))
        {
            using (PrincipalSearchResult<Principal> src = UserPrincipal.FindByIdentity(pc, SystemInformation.UserName).GetGroups(pc))
            {
                src.ToList().ForEach(sr => myGroups.Add(sr.SamAccountName));
            }
        }
        result = myGroups.Contains(ADGroupName);
        return result;
    }

Bu çok iyi bir cevap ve bu ve diğer projeler için kesinlikle aklıma gelen bir şey. Ancak asıl mesele, bu programın şirketimiz dışındaki kullanıcılarıdır. Hem kardeş şirketlerimize hem de harici üçüncü taraf kullanıcılara sunuyoruz. Aslında bu noktada, ağımız dışındaki kişiler için bu özellikleri tamamen devre dışı bırakmanın ve önerilerinizi dahili amaçlar için kullanmanın en iyi olacağını düşünüyorum.
Anthony

5

Yönetici dışarı şifre hakkında haklı . Bu bir sorun değil, ne zaman.

Active Directory bazı kullanıcılar için bir seçenek olmadığından, süper kullanıcı erişimine izin verilen Windows oturum açma adlarının listesini içeren imzalı bir metin dosyası oluşturabilirsiniz . Bu, insanların bilgisayar veya oturum açma bilgilerini paylaşmadığını varsayar.

Kullanıcı adları, uygulamanın klasörüne konacak kolayca dağıtılan bir metin dosyasına girer. Önemli olan, kullanıcı adları listesini imzalamaktır. Çok basit olsun. Satır başına bir kullanıcı adı ve karmayı son satıra koy. Program ikili programınıza bir çeşit gizli anahtar ekleyin ve bunu kullanıcı adlarıyla birleştirin. Gizli anahtar, insanların dosyayı değiştirmesini ve ardından karmayı kendilerinin hesaplamasını önleyecektir (bu, başlangıçta muhtemelen çok zorlanır).

UserName1
UserName2
.
.
.
UserName34
<HashOfUserNamesAndSecretKey>

Bu, elbette, bir yerdeki birinin yetkili kullanıcılar listesinin yöneticisi olarak hareket etmesini gerektirir. Yönetici, dosyayı ve karmayı oluşturan bir programa (sizin tarafınızdan yazılmıştır!) Sahip olmalıdır. Başka bir şey yoksa, kullanıcı adlarının bir metin dosyasını alabilir ve karma ekleyebilir.

Kapsamlı olmak amacıyla, erişimi iptal eden bir kişi, hâlâ oturum açma adı olan dosyanın kopyasını alabilir. Erişmek istedikleri zaman kopyalarını yerleştirebilirler. Muhtemelen endişelenecek bir şey değil.


3

Active Directory bir seçenek olmadığından, geçerli tarihi hash ederdim. İlk önce en entropili (ay günü) ve en az entropili son (yıl) olan öğeleri kullanın. Gerekirse, alana özel bir tuz ekleyin (şirket dışında kullanıldığından bir müşteri kimliği, şirket adı vb.). Bu, son kullanıcıların tahmin etmesi neredeyse imkansız olan her gün çok farklı bir şifre üretmelidir ve yazılımı kullanan farklı şirketler için farklı olabilir.

Bu yazılım aslında bir tavuk ve yumurta problemidir, çünkü yazılımın telefonu telefon etmeden kullanıcının kimliğini doğrulaması gerekir. Bu yüzden gerçekten belirsiz bir çatlama mekanizmasına sahip bir yumurta yapın: belirsizlik yoluyla güvenlik gerçek güvenlik olmasa da, probleminizin parametrelerini verdiğiniz en iyisi budur.

Bu aynı zamanda bir yere bir metin dosyası yerleştirmekten daha iyidir: Bu, statik bir paroladan daha iyi değildir, çünkü sır çıktıktan sonra oyun biter.


0

Erişim Kontrol Listelerini kullanın .

Bunu yapmanın hızlı ve kirli yolu, uygulama dizinindeki tüm izinleri (okuma izni dahil) kaldırmak ve ardından uygulamayı çalıştırma izni olan tüm kullanıcılar için bu izinleri eklemektir. Elbette, izinli bir kullanıcı uygulama dizinini halka açık bir konuma kolayca kopyalayabilir, ancak bunun yanlışlıkla gerçekleşmesi olası değildir, oysa şifre paylaşımı yanlışlıkla kolayca gerçekleşebilir.

Bu, elbette, ilgili bilgisayarların güvenli olduğunu varsayar (umarım aktif dizin ile).


İlgili bilgisayarlar etkin dizine sahipse, bir güvenlik grubuna üye olarak gelişmiş işlevselliği sağlamak en iyisi olabilir. Kullanıcılar gruba gerektiği gibi eklenebilir ve dosya sistemi izinleri ilgili değildir
Kevin

@Kevin: Kabul etti. Bence Dan'ın Cevabı bunu kapsıyor.
Brian

0

Benim tercihim @Dan'ın önerdiği gibi - aktif dizini kullan. Bu mümkün değilse, zamana dayalı bir şifre üreticisi faydalı olabilir. Benzer bir durumda, (çok uzak geçmişte) çalıştığım bir şirket 9999-MMDD kullandı. Bu birkaç yıl sonra ortaya çıktı. Hmm olarak attıysanız ve biraz karıştırdıysanız, biri kediyi çantadan çıkarmadan önce bir veya iki yıl alabilirsin.

Her zaman benzer, ancak daha karmaşık bir strateji kullanarak şifre oluşturan bir program yazabilirsiniz. Kullanılan isme bir makine ismi de atın. Yöneticiniz, o makinenin geçerli şifresini almak için bu programı çalıştırabilir. Bazı bilgileri dosyada saklayın, böylece başka bir makineye kopyalanırsa veya farklı bir kullanıcı oturum açarsa geçerli olmaz. Daha sonra programı güvenli tutmak ve kedi dışarı çıkarsa, onun hatası onun yöneticisi.

Bu şema, cyrpto açısından zayıf ve güvenilmez olarak kabul edilir, ancak sahip olduğunuz sorun için yeterlidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.