Programa key eklemek

zentiqwe

Femtopat
Katılım
15 Şubat 2024
Mesajlar
8
Daha fazla  
Cinsiyet
Erkek
Öncelikle selamünaleyküm.
EXE uzantılı bir programa nasıl key ekleyebilirim programa giren kişinin programa girmeden önce bu keyi girip programa erişmesi gerekiyor yani kişiye özel key vermeliyiz key yanlış olursa programa giriş yapmamalı bunu yapmak ve iyileştirmek için nasıl bir yol izleyebilirim yardımcı olursanız sevinirim.
 
Son düzenleyen: Moderatör:
"Kişiye özel key" için bir Key Server gerekir, internet bağlantısı gerekir.

Ben olsam her ürettiğim key'i bir activation ve expire date'le beraber db'de tutarım. Bir web tabanlı api oluştururum ve key sorgularını bu API üzerinden hallederim. Eğer key eşleşiyorsa geçici bir AUTH key veririm ve kullanıcının AUTH keyi eşleştiği müddetçe programda kalmasına izin veririm düzenli aralıklarla API'a sorgu atarak.

Keyler belli bir matematik sonucu üretilmeliler, tamamen random olmamalılar. Kullanıcı cracklemeyi denese bile integrity check yapıp engellersin. Algoritma ne kadar karmaşık, key o kadar güvenli olur. TOTP'de düşünebilirsin ama geçici keydir TOTP.

Ek olarak uygulamanın kendisinin de bir integrity checking yapması güzel olur, sistemin kodlarının manipüle edilip edilmediğini görmüş olursun ve böylece ekstra bir önlem olur.

Eksik anlattığım bir şey olabilir belki, sistem güvenliği uzmanı değilim sonuçta. Genel kanılar bunlar.
 
"Kişiye özel key" için bir Key Server gerekir, internet bağlantısı gerekir.

Ben olsam her ürettiğim key'i bir activation ve expire date'le beraber db'de tutarım. Bir web tabanlı api oluştururum ve key sorgularını bu API üzerinden hallederim. Eğer key eşleşiyorsa geçici bir AUTH key veririm ve kullanıcının AUTH keyi eşleştiği müddetçe programda kalmasına izin veririm düzenli aralıklarla API'a sorgu atarak.

Keyler belli bir matematik sonucu üretilmeliler, tamamen random olmamalılar. Kullanıcı cracklemeyi denese bile integrity check yapıp engellersin. Algoritma ne kadar karmaşık, key o kadar güvenli olur. TOTP'de düşünebilirsin ama geçici keydir TOTP.

Ek olarak uygulamanın kendisinin de bir integrity checking yapması güzel olur, sistemin kodlarının manipüle edilip edilmediğini görmüş olursun ve böylece ekstra bir önlem olur.

Eksik anlattığım bir şey olabilir belki, sistem güvenliği uzmanı değilim sonuçta. Genel kanılar bunlar.
Hayran kaldim 🫠
 
"Kişiye özel key" için bir Key Server gerekir, internet bağlantısı gerekir.

Ben olsam her ürettiğim key'i bir activation ve expire date'le beraber db'de tutarım. Bir web tabanlı api oluştururum ve key sorgularını bu API üzerinden hallederim. Eğer key eşleşiyorsa geçici bir AUTH key veririm ve kullanıcının AUTH keyi eşleştiği müddetçe programda kalmasına izin veririm düzenli aralıklarla API'a sorgu atarak.

Keyler belli bir matematik sonucu üretilmeliler, tamamen random olmamalılar. Kullanıcı cracklemeyi denese bile integrity check yapıp engellersin. Algoritma ne kadar karmaşık, key o kadar güvenli olur. TOTP'de düşünebilirsin ama geçici keydir TOTP.

Ek olarak uygulamanın kendisinin de bir integrity checking yapması güzel olur, sistemin kodlarının manipüle edilip edilmediğini görmüş olursun ve böylece ekstra bir önlem olur.

Eksik anlattığım bir şey olabilir belki, sistem güvenliği uzmanı değilim sonuçta. Genel kanılar bunlar.
Hocam bahsettiğiniz RESTful API sanırım,Bu API gerekli URL’e request atıldığında verileri JSON olarak sunuyor herhalde. Uzman değilim bende bir şeyler kapmak istiyorum. Bilmediğimden soruyorum başka birisi de nereye request atacağını bilirse keylere erişimi olmaz mı?

API’ye erişimi olan Client’lar için birde API key mi olacak? Belirli IP’ler üzerinden gelen requestlere izin vermek ve rate limiting yapmak da güvenlik için iyi olur değil mi? Birde keylerin mesela veritabanında şifrelenerek saklanması gerekiyor anladığım kadarıyla.
 
Hocam bahsettiğiniz RESTful API sanırım,Bu API gerekli URL’e request atıldığında verileri JSON olarak sunuyor herhalde. Uzman değilim bende bir şeyler kapmak istiyorum. Bilmediğimden soruyorum başka birisi de nereye request atacağını bilirse keylere erişimi olmaz mı?
Keylerin hepsini çekmiyorsun API'dan, key'in varlığını doğruluyorsun. Dolayısıyla keyleri göremezler, erişimleri olmaz.

Keyler secrettır. Key'e erişimi olan kişi API'a erişimi varsa geçici AUTH key alabilir ama AUTH keyi alsa ne yapacak? AUTH keyin tek amacı kullanıcının programda kalmasına izin vermek ve geçici, yani süresi dolunca erişim hakkı kalkacak.

İlla Restful olmak zorunda değil ama daha yaygın, hızlı ve geliştirmesi kolay, onun da kendi güvenlik önlemleri var ayriyeten.

API’ye erişimi olan Client’lar için birde API key mi olacak? Belirli IP’ler üzerinden gelen requestlere izin vermek ve rate limiting yapmak da güvenlik için iyi olur değil mi? Birde keylerin mesela veritabanında şifrelenerek saklanması gerekiyor anladığım kadarıyla.
Keyler şifrelenmez hashlenir. Şifrelediğin çözülür, hash çözülmez. Hash collision yaşanabilir belki ama SHA256'da zor bu. SHA-512 kullanırsan daha da zor.

Rate limiting kesinlikle önemli brute force önlemek adına ama IP kısıtlaması sıkıntılı iş. Statik IP gerektirir kullanıcı tarafında. Yada sürekli mail doğrulaması istemen gerekir. User experience açısından berbat bir şey. Keyler yeterince uzun olursa rate limiting tek başına brute force'a karşı etkilidir.

API key vermezsin, public API'dır doğrulama API'ı. Sonuçta amaç doğrulamak. Doğrulamayı yerel değil bulutta yapıyoruz kısaca. Login işlemi doğrulamak gibi düşün, teknik olarak kullanıcı adı şifre yerine special key verecek programın kullanıcısına. Bu kadar zahmete girmişken login kısmını kendi keylerin yerine OAuth'a da bırakabilirsin normalde ama böyle bir şeyle uğraşmak öğrenmeye de yardımcı oluyor.

Benimde muazzam bilgim yok konu üstüne. Az biraz tecrübe üstüne konuşuyorum. Daha öncede dediğim gibi güvenlik uzmanı değilim, bilgim kısıtlı, eksik söylediğim şeyler olabilir.
 
Son düzenleme:
Bir kere bunu yuzde yuz yapamazsin.
Kullanici programini Assembly e cevirir, key check yaptigin blogu "true" yapar, ne kadar sofistike key kullanirsan kullan hicbir anlami kalmaz. DNS degistirir, programin senin sunucuna degil her-gelen-key-onayla.com sitesine gider yine anlami kalmaz.
Isi bilen kullanici client side calisan programi her turlu hackler. Alacagin her guvenlik onlemi sadece bu kacinilmaz sonu geciktirir.

Ote yandan ofiste excel acmak disinda teknik bilgisi olmayan bir grup kullanici icin secure random key uretirsin, bunlara kendi sunucunda hatta executable icinde validasyon mekanizmasi eklersin ve olay biter.
 
Bir kere bunu yuzde yuz yapamazsin.
Kullanici programini Assembly e cevirir, key check yaptigin blogu "true" yapar, ne kadar sofistike key kullanirsan kullan hicbir anlami kalmaz. DNS degistirir, programin senin sunucuna degil her-gelen-key-onayla.com sitesine gider yine anlami kalmaz.
Isi bilen kullanici client side calisan programi her turlu hackler. Alacagin her guvenlik onlemi sadece bu kacinilmaz sonu geciktirir.

Ote yandan ofiste excel acmak disinda teknik bilgisi olmayan bir grup kullanici icin secure random key uretirsin, bunlara kendi sunucunda hatta executable icinde validasyon mekanizmasi eklersin ve olay biter.
Hocam bir sürü alanla ilgili bilginiz var gerçekten çok mutlu oluyorum böyle şeyler görünce. Bende elimden geldiğince sizin gibi değerli insanlardan yararlanmaya çalışıyorum. Sorum şu olacak client side bulaşmadan böyle bir sistem kurmanın bir yolu yok mu?


Aynı şekilde client assembly çevirildiği gibi executable da bu şekilde kırılmaz mı?
 
Hocam bir sürü alanla ilgili bilginiz var gerçekten çok mutlu oluyorum böyle şeyler görünce. Bende elimden geldiğince sizin gibi değerli insanlardan yararlanmaya çalışıyorum. Sorum şu olacak client side bulaşmadan böyle bir sistem kurmanın bir yolu yok mu?


Aynı şekilde client assembly çevirildiği gibi executable da bu şekilde kırılmaz mı?

Evet, zaten ben de kullanicinin calistirdigi executable derken bunu kastediyordum. Hangi isletim sistemi oldugu fark etmez; o sistemde machine code a donusturulebilen her program assembly e de donusturulebilir. Yani sen kullaniciya bir program verip de "Al bunu calistir" dedigin andan itibaren kullanici onu istedigi gibi manipule eder. DNS degistirir, IP tablosu degistirir, Windows'daki gibi sacma sapan regedit kayitlari varsa onlari manipule eder, memory de tuttugu degiskenlere erisir, data dosyalarina erisir. Istedigini yapar. Bunun onune gecmek icin oturup kernel level calisan ve ustte dedigim ve benim de bilmedigim mekanizmalarin hepsini kontrol eden ayri bir savunma mekanizmasi yazacaksin ki onun da kendisi degistirilebilir ya da client-side taraf guvenligi ile cok ugrasmayacaksin :)

Oyun firmalari senelerdir bu sorunu cozmek icin ugrasiyorlar. Mumkun oldugu kadar guvenligi merkezi bir kontrole, server tarafa almak; client tarafi guvenligi surekli update edilen protokollerle saglamak gerek. Ancak dogasi geregi offline calisan bir program ise yapacak bir sey yok, yeterince zamani olan teknik bir insan hackler.

Ayrica asiri guvenlik User Experience'i baltalar. 18 karakterli en az 2 tane ozel karakter isteyen sifre, 3D security, surekli online olma zorunlulugu, root-kit guvenlik duvari uygulamasi vs yukle diye dayatirsan kullanici da "yemisim senin programini" diyerek kacar gider. Dengeyi bulmak gerek.
 

Geri
Yukarı