Uygulama güvenliğinin ilk kuralı: Bir saldırganın sınırsız fiziksel veya elektronik erişim elde ettiği herhangi bir makine, gerçekte nerede olduğuna veya ne için ödeme yaptığınıza bakılmaksızın saldırganınıza aittir.
Uygulama güvenliğinin ikinci kuralı: Bir saldırganın içine giremeyeceği fiziksel sınırları geride bırakan herhangi bir yazılım, kodlamak için ne kadar zaman harcadığınıza bakılmaksızın saldırganınıza aittir.
Üçüncü kural: Bir saldırganın nüfuz edemeyeceği aynı fiziksel sınırları bırakan herhangi bir bilgi, sizin için ne kadar değerli olursa olsun, saldırganınıza aittir.
Bilgi teknolojisi güvenliğinin temelleri şu üç temel ilkeye dayanmaktadır; Gerçekten güvenli olan tek bilgisayar, bir Farraday kafesinin içinde, çelik bir kafesin içinde güvenli bir kasada kilitlenmiş olan bilgisayardır. Hizmet hayatlarının çoğunu sadece bu durumda geçiren bilgisayarlar var; yılda bir kez (veya daha az), güvenilir kök sertifika yetkilileri için özel anahtarlar oluştururlar (içinde bulundukları odanın her santimini kaydeden kameralarla bir dizi tanığın önünde).
Artık çoğu bilgisayar bu tür ortamlarda kullanılmamaktadır; fiziksel olarak açıkta, kablosuz bir radyo kanalı üzerinden İnternet'e bağlı. Kısacası, yazılımları gibi hassastırlar. Bu nedenle onlara güvenilmemelidir. Bilgisayarların ve yazılımlarının yararlı olması için bilmesi ya da yapması gereken bazı şeyler vardır, ancak hiçbir zaman zarar veremeyecek kadar bilmeyecek ya da yeterince yapamayacaklarından emin olmak için özen gösterilmelidir (en azından o makinenin sınırları dışında kalıcı hasar değil) ).
Bunların hepsini zaten biliyordunuz; bu yüzden uygulamanızın kodunu korumaya çalışıyorsunuz. Ama burada ilk sorun yatıyor; gizleme araçları, kodun bir insanın kazmaya çalışması için bir karmaşaya neden olabilir, ancak programın hala çalışması gerekir; bu, uygulamanın gerçek mantık akışı ve kullandığı verilerin gizlenmeden etkilenmediği anlamına gelir. Biraz azim göz önüne alındığında, bir saldırgan kodu gizlemeden kaldırabilir ve baktığı şeyin aradığı şeyden başka bir şey olamayacağı belirli durumlarda bile gerekli değildir.
Bunun yerine, saldırganın açık bir kopyasını alması ne kadar kolay olursa olsun, bir saldırganın kodunuzla hiçbir şey yapamayacağından emin olmalısınız. Bu, sabit kodlanmış sırlar olmadığı anlamına gelir, çünkü kod, onu geliştirdiğiniz binadan çıkar çıkmaz bu sırlar gizli değildir.
Sabit kodladığınız bu anahtar / değer çiftleri uygulamanın kaynak kodundan tamamen kaldırılmalıdır. Bunun yerine, üç yerden birinde olmalılar; aygıtta geçici bir bellek var, bu da saldırganın çevrimdışı bir kopyasını alması daha zor (ama yine de imkansız değil); bir demir yumrukla erişimi denetlediğiniz sunucu kümesinde kalıcı olarak; veya fiziksel bir kart veya kullanıcı anılarınız gibi cihazınızla veya sunucularınızla ilgili olmayan ikinci bir veri deposunda (yani sonunda kalıcı bellekte olacaktır, ancak uzun süre olması gerekmez).
Aşağıdaki şemayı düşünün. Kullanıcı, uygulamanın kimlik bilgilerini bellekten cihaza girer. Ne yazık ki, kullanıcının cihazının zaten bir keylogger veya Trojan tarafından ele geçirilmediğine güvenmelisiniz; bu konuda yapabileceğiniz en iyi şey, kullanıcının kullandığı cihazlar (MAC / IP, IMEI, vb.) hakkında sahte ve zor tanımlayıcı bilgileri hatırlayarak ve tarafından en az bir ek kanal sağlayarak çok faktörlü güvenlik uygulamaktır. bilmediğiniz bir cihazda oturum açma girişimi doğrulanabilir.
Girilen kimlik bilgileri, istemci yazılımı (güvenli bir karma kullanarak) tarafından gizlenir ve düz metin kimlik bilgileri atılır; amaçlarına hizmet ettiler. Gizlenen kimlik bilgileri, güvenli bir kanal üzerinden sertifika kimlik doğrulamalı sunucuya gönderilir ve bu da onları yeniden oluşturur da oturum açma işleminin geçerliliğini doğrulamak için kullanılan verileri üretmek üzere . Bu şekilde, istemci veritabanı değeriyle gerçekte neyin karşılaştırıldığını asla bilemez, uygulama sunucusu doğrulama için aldıkları şeyin arkasındaki düz metin kimlik bilgilerini asla bilemez, veri sunucusu doğrulama için depoladığı verilerin nasıl üretildiğini ve ortada güvenli kanal tehlikeye atılmış olsa bile sadece anlamsız görünüyor.
Doğrulandıktan sonra, sunucu kanal üzerinden bir jeton iletir. Belirteç yalnızca güvenli oturumda kullanışlıdır, rasgele gürültü veya oturum tanımlayıcılarının şifreli (ve dolayısıyla doğrulanabilir) bir kopyasından oluşur ve istemci uygulaması bu belirteci herhangi bir isteğin bir parçası olarak sunucuya aynı kanalda göndermelidir. bir şey yapmak. İstemci uygulaması bunu birçok kez yapacaktır, çünkü para, hassas veriler veya kendi başına zarar verebilecek başka herhangi bir şey yapamaz; bunun yerine sunucudan bu görevi yapmasını istemelidir. İstemci uygulaması, en azından düz metin olarak değil, cihazın üzerindeki kalıcı belleğe hiçbir zaman hassas bilgiler yazmaz; istemci sunucudan hatırlayacağı herhangi bir yerel veriyi şifrelemek için sunucudan güvenli kanal üzerinden simetrik bir anahtar isteyebilir; daha sonraki bir oturumda istemci, kalıcı bellekte kullanılmak üzere verilerin şifresini çözmek için sunucudan aynı anahtarı isteyebilir. Bu veriler de tek kopya olmayacak; istemcinin depoladığı her şey bir şekilde sunucuya iletilmelidir.
Açıkçası, bu, uygulamanızı büyük ölçüde İnternet erişimine bağımlı kılar; istemci aygıt, sunucu ile düzgün bağlantı ve kimlik doğrulama yapmadan temel işlevlerinden hiçbirini gerçekleştiremez. Facebook'tan farklı değil, gerçekten.
Şimdi, saldırganın istediği bilgisayar sunucunuzdur, çünkü istemci uygulaması / cihazı değil, ona para kazandırabilecek veya diğer insanların keyfi için acı çekmesine neden olabilecek şeydir. Bu iyi; paranızın karşılığını tüm sunucuları güvenceye almaktan çok daha fazla para alıyorsunuz. Sunucu her türlü güvenlik duvarının ve diğer elektronik güvenliğin arkasında olabilir ve ayrıca çelik, beton, anahtar kart / pim erişimi ve 24 saat video gözetiminin arkasında fiziksel olarak güvence altına alınabilir. Saldırıcınızın sunucuya doğrudan her türlü erişimi elde etmek için gerçekten çok sofistike olması gerekir ve hemen bunu bilmelisiniz.
Bir saldırganın yapabileceği en iyi şey kullanıcının telefonunu ve kimlik bilgilerini çalmak ve istemcinin sınırlı haklarıyla sunucuya giriş yapmaktır. Böyle bir durumda, tıpkı bir kredi kartını kaybetmek gibi, meşru kullanıcıdan 800'lü numarayı (tercihen hatırlaması kolay ve cüzdanında, cüzdanında veya evrak çantasında taşıyabilecekleri bir kart değil) araması istenmelidir. mobil cihazla birlikte çalındıysa), doğrudan müşteri hizmetinize bağlayan erişebilecekleri herhangi bir telefondan. Telefonlarının çalındığını, bazı temel benzersiz tanımlayıcıların sağlandığını ve hesabın kilitlendiğini, saldırganın işleyebileceği tüm işlemler geri alındığını ve saldırganın kareye geri döndüğünü belirtirler.