Kod gizliliği davası?


47

Yasadışı kod yazmanın, kodu geliştiren insanlara ve söz konusu kodu çalıştıran işlere (söz konusu kod aslında ticari kod ise) gerçek bir faydası sağlaması açısından en önemli nedenler nelerdir? Şaşırtmanın kötüden daha iyi yaptığını açıklayan belgelenmiş durumlar (çevrimiçi olarak mevcuttur)? Örneğin, şaşırtmanın kötü niyetli bir 3. tarafın yasalara uymasını anlamlı bir şekilde geciktirdiği kanıtlanmış olduğu bilinen örnekler var mı? Tıpkı arabanızın camlarını çevirmek gibi insanların onları kırmasını ve müzik setinizi çalmasını engellemeyecek gibi görünüyor, kodunuzu gizlemek sadece dürüst insanları tutar.

=========

Arka fon:

Bu, bu konudaki varsayımlarıma kasten meydan okuma girişimidir.

Genel olarak kod gizleme kullanmamaya karşı büyük zaman harcıyorum, ancak bir şeyi kaçırıp kaçırmadığımı merak ediyorum. JavaScript gibi durumlarda minyatürleştirmenin işlerin daha hızlı ve daha hızlı yüklenmesine neden olduğunu anladım (orada gerçek, işlevsel bir fayda var), ancak engelleme amacıyla kod engellemenin tek bir nedeni bulamıyorum. Bir kod / algoritma bölümünün ne yaptığını keşfetmek , aslında herhangi bir amaç için etkilidir.

Açık kaynak popüler olmakla birlikte, soru "kodu paylaşın mı yoksa özel tutmak mı?" Ticari kurallara gelince, neden her şeyi paylaşamadığınızı anlayabiliyorum ve hırsızlıkla savaşmak için yanınızda bir yasa var.

BTW, birisinin gizlenmiş kod yazmasının sebebi "iş güvenliği" ise, tutarlı bir şekilde bulunan herhangi bir programcıyı kovardım ve yalnızca bazı işlerin yapıldığını makul bir şekilde göstermediği sürece işlerini sürdürmelerine yardımcı olmak amacıyla gizlice kandırmayı kullanırdım. işletme yardımı. O kadar tamamen takım karşıtıdır ki saçma bir şeydir ve işini yanlış yönlendirilmiş uygulamalarla sürdürmekle ilgilenen, sonra müthiş bir yazılım yazdıkları için saklamakla ilgilenen birine işaret eder.

Sadece bu özel durumdan bahsediyorum, çünkü insanların genellikle şaka yaptığını fark etsem de, temel iticiliği tek başına iş güvenliği için şaşırtmanın iyi bir fikir olduğu yanıtlarını caydırmak istiyorum.


3
Bence hepsini söyledin
Paul


6
Basitçe söylemek gerekirse, şaşırtmaca kodunuzu tersine çevirme ekonomisini değiştirir , başka bir şey yapmaz.
Mark Booth,

Herkese teşekkürler. Ayrıntılı cevaplarınız ve yorumlarınız için kesinlikle bu konuda farklı bir bakış açısı gördüm. Bu konunun çeşitli açılarından bahseden çok sayıda yüksek kaliteli cevap var. Tek bir soru vermek yerine, favorilerime oy verdim.
Ocak'ta

Düşündüğünüz veya odaklandık kaynak kodu veya nesne / çalıştırılabilir kod? Örneğin, Gimpel yazılımı tüy bırakma araçlarının bir sürümünü karışık C kaynak kodunda dağıtır, öyle ki, tipik olarak Unix müşterileri, Gimpel'in N hedef kitleyi desteklemesi / sürdürmesi gerekmeksizin, istedikleri ortamda çalışacak şekilde derleyebilirler. garip veya eski ortamlar dahil. Bu, tersine mühendislik geciktirmek / caydırmak için bir güvenlik katmanı olarak kopya veya veri koruması (örneğin yasadışı kopyalama) için kullanılan nesne / çalıştırılabilir gizlemeden farklıdır.
mctylr

Yanıtlar:


49

Şaşırtma için çok ilginç bir kullanım örneği, yasadışı kopyaların kökenini takip etmektir. Şaşırtmanın nispeten ucuz bir işlem olduğu varsayılarak, orijinal yazar, her müşteriye, uygulamanın farklı bir şekilde dağıtılmış sürümlerini sunabilir, eğer yasadışı bir kopya bulunursa, yazar verilen sürümlerle karşılaştırıp korsanlığın kaynağını geri alabilir.

Bu bir steganografi şeklidir , ilham verici ve "hain izleme" şifreleme şemalarının varyasyonundadır . Yaygın 1 olup olmadığını veya iyi bir fikir olsa bile hiçbir fikrim yok , ancak pratikte aşağıdaki parametreler altında uygulandığını gördüm:

  • Sadece iki satıcı ile rekabet gücü yüksek ülke çapında pazar,
  • Yaklaşık 50 dağıtım, piyasayı kapsıyordu,
  • Her iki uygulama için ortalama geliştirme süresi birkaç yıldı (az ya da çok),
  • Uygulamamız için ortalama şaşırtma süresi birkaç saatti.
  • Her iki uygulama için de kullanım ömrünün yaklaşık on yıl olması bekleniyordu.

Mantığı ders oldu gizlilik üzerinden güvenlik başlangıçta ve bir noktada yukarıda belirtilen şema de gelişti 2 . Her iki satıcı da birbirlerinin ikili kodlarına yasal olarak erişebildi ve her ikisinden de ayrıştırma girişimlerinin beklendiği açıktı. Şaşırtmaca, uzun vadede güvenlik açısından hiçbir şey yapmadı. Her iki satıcı da son derece karlı ve niş bir pazarda çalışan, son derece motive ve yetenekli ekiplere sahipti, sonuçta ürünlerimizde olmadığı kadar benzerdi ve diğer daha az belirsiz yollarla rekabet avantajı kazandı.

Gerçekten genişleyemiyorum, çünkü (a) kariyerimde çok erken oldu ve tasarım kararlarına ya da izleme planının sonuçlarına (eğer varsa) ve (b) katılımımın bir kısmına net bir bakış alamadım. Proje ile birlikte NDA altındaydı.

Şaşırtma için başka bir geçerli kullanım örneği, bir şekilde yasal olarak kodunuzu üçüncü bir tarafa göndermekle yükümlü olduğunuzda olabilir :

Firmanız IP şirketleri için teknoloji şirketleri üzerinde çalışıyorsa veya yazılım kaynak kodunu içeren vakalarla ilgileniyorsa, müşterinizin kaynak kodunu USPTO'ya, bir mahkemeye veya üçüncü bir tarafa göndermek zorunda kalabilirsiniz.

Kaynak kod bir ticari sır olarak kabul edildiğinden, çoğu düzenleyici kurum "% 50" kuralını kullanmaktadır. Gönderilen kaynak kodu, olduğu gibi kullanılamayacak şekilde gizlenmiştir.

IANAL ve bağlantı, gerçek çalışma kodundan ziyade kodun basılı kopyalarıyla daha fazla ilgilidir, bu nedenle bu tamamen alakasız olabilir.

Şimdi, Javascript kandırma için kanonik bir örnek olduğundan, yaygın olarak düşünülmeyen bir yan etki vardır ve bu gizemli Javascript'te kötü amaçlı kodu gizler. Her ne kadar 3 Javascript küçültmenin kesin avantajları olsa da, gerçek şaşırtmaca konusunda hiçbir nokta görmüyorum ve Douglas Crockford'un benimle aynı fikirde olduğu için mutluyum :

Sonunda, kod gizliliği sorunu var. Bu kayıp bir sebep. Kararlı bir bilgisayar korsanının programınızı anlamalarını engelleyecek bir dönüşümü yoktur. Bu, tüm dillerdeki tüm programlar için doğrudur, kaynak biçiminde teslim edildiğinden, JavaScript ile daha açık bir şekilde doğrudur. Şaşırtmaca tarafından sağlanan gizlilik parası bir yanılsamadır. İnsanların programlarınızı görmesini istemiyorsanız, sunucunuzu çıkarın.

“İş güvenliği” konusunda şaşkınlık söz konusu olduğunda, bu, kod incelemesini asla geçmemesi gereken bir davranış olup, tanımlandığı takdirde tolere edilmemelidir. İlk başta suçluyu kovmak kadar ileri gidemem, ama tekrar eden suçluların kesinlikle en azından iyi bir şaplak atmayı hak ettiğini.

Sonuç olarak, şaşırtma gizlilik yoluyla tipik bir güvenlik örneğidir, sadece açık olan caydırıcıdır caydırıcı ve başka bir şey değildir. Bilmediğim yaratıcı kullanım vakaları olabilir 4 , fakat genel olarak faydalar en az düzeydedir.

1 Bunu yazdıktan sonra , temelde aynı şemayı tanımlayan bu cevabı buldum , bu yüzden düşündüğümden daha yaygın olabilir.
2 Her ne kadar steganoğrafi belirsizlik yüzünden hala güvenlik.
3 Minyatürleştirme ~ beyaz boşluğu kaldırma ve belirteçleri kısaltma, kasten engelleyici değil.
4 Does Uluslararası Gizlenmiş C Kod Yarışma sayımı?


"İnsanların programlarınızı görmesini istemiyorsanız, sunucunuzu çıkarın." - veya Software Guard Extensions kullanın ve Intel'e güvenin.
user253751

40

Kod gizliliği davası, kodun ne / nasıl çalıştığını belirlemek için 3. bir taraf için çıtayı yükseltmesidir.

Ancak, bu mu DEĞİL bir geliştirici hiç Karartılmış kod yazarken gerektiğini anlamına gelir.

Bakın, sorunuzun eksik olduğunu düşündüğüm bit bu: Kod gizleme (JavaScript minification gibi), geliştirici tarafından elle yapılmasına gerek yok - ve yapılmamalı -. Aynı şekilde, bu sürüm kontrolünde de çekirdek kaynak dosyalarınız olarak saklanmamalıdır.

Kod gizleme, üretim yapınıza derleme sırasında bir işlem sonrası adım olarak gerçekleşmelidir. Sıra bunun için 3. parti ürünler bol yüzden orada vardır neredeyse evde bunu yapmak için hiçbir neden.

Örneğin: Dotfuscator

IEEE, kod gizlemenin etkinliği hakkında bir bildiri yayınladı

Sonuçlar, kimliğin yeniden adlandırılmasının, saldırıların etkinliğini önemli ölçüde azalttığını, başarılı bir saldırıyı tamamlamak için gereken süreyi iki katına çıkardığını (en kötü senaryoda bile, en iyi saldırgana karşı bile olsa) göstermektedir. Ek olarak, şaşırtmaca acemi ve yetenekli saldırganlar arasındaki boşluğu azaltır, ikincisini daha az verimli hale getirir ve kırılması zor olanlara daha net bir şekilde saldırması daha kolay olan sistemleri daha kolay hale getirir.

Vurgu madeni.


2
Bu + 1'i verirdim, ancak bağlantı tüm okuyucuların erişemeyeceği ücretli bir abonelik gerektiriyor.
mattnz

Evet, bu IEEE'nin tamamen mutlu olmadığım talihsiz gerçeğidir, ancak bu başka bir konudur
Dan McGrath,

8
Burada halka açık bir pdf versiyonu var . Bence bunu kullanmak sorun değil, makalenin yazarlarından Mariano Ceccato'nun ana sayfasında.
yannis,

Harika bul Google Akademik’le aradım ancak bulamadım. Bağlantıyı güncelledim.
Dan McGrath

1
+ Kod gizliliği (JavaScript minification gibi) için +1 değil - geliştirici tarafından manuel olarak yapılmamalıdır - ve yapılmamalı -
João Portela

35

Bir MMORPG'nin geliştirilmesine katıldım. Bu sunucu mantığı ve istemci mantığı içeriyordu. Projenin yıl boyunca süren gelişimi boyunca, müşteri ile sunucu arasındaki arayüzü göz önüne aldığımızda, kural, müşterinin, saldırıya uğradığı varsayımı altında her zaman sunucu tarafından ele alınması gerektiğidir. Başka bir deyişle, sunucunun, istemciden sunucunun başarısız olmasına neden olabilecek veya istemcinin hile yapmasına izin verebilecek bir yanıt gelmeyecek şekilde yazılması gerekiyordu. Yine de, en baştan beri bilgisayar korsanlarının kaçınılmaz olarak sistemde delikler bulabilecekleri ve hile yapmak için onları kullanacakları biliniyordu. Ve bir süre sonra yaptılar.

Tabii ki, müşteriyi oradaki büyük büyük dünyaya göndermeden önce, şaşırtmayı başardık. Şaşırtmanın aşağıdaki etkilere sahip olduğuna inanıyoruz:

  1. Uzman olmayan bilgisayar korsanlarının denemelerini bile engelledi.
  2. Uzman bilgisayar korsanlarını herhangi bir saldırıya ulaşmada geciktirdi.
  3. Uzman bilgisayar korsanlarının başardığı bilgisayar korsanlarının sayısını azalttı.
  4. Hack'lerin etkinliğini sınırladı.
  5. En önemlisi: bilgisayar korsanlarının, bilgisayar korsanlarına karşı düzensiz faaliyetler arayarak onları keşfetme şansımızı arttıran, çalışma hackine ulaşmadan önce korsan müşterilerinin sunucularımıza karşı daha fazla deneme çalışması yapmasına neden oldu.

Keşfedilen bilgisayar korsanlarının oyun hesapları iade edilmeden sonlandırıldı, bu nedenle bilgisayar korsanlığı işini daha pahalı ve daha az cazip hale getirdi.

Bu yüzden, yukarıdakilerin hepsinden ötürü, şaşırtmanın oyunumuzda genel olarak olumlu bir etkisinin olduğuna inanıyorum ve bunun sonucunda da şaşırtmanın mümkün olduğu her türlü yazılımda şaşırtmanın genel olarak olumlu bir etkisi olabileceğine inanıyorum. (Örneğin, kopya koruma önlemleri içeren yazılımlar.)

Şaşırtmanın bakım üzerindeki etkileri hiçbir şeye yakındı. Bazı deneyimsiz programcıların tanımlayıcıların isimleriyle ilgili varsayımlarda bulundukları (yansıma kullanıyorlardı) birkaç yer vardı, ancak bir zamanlar her şey yolunda gitti. Bu şaşırtma adımı, oyunun yapım versiyonu için genel yapım adımının bir parçası haline geldi, bu nedenle geliştiricilerin çoğu bu konuda endişelenmek ya da bununla bir ilgisi olmak zorunda kalmadı. Oyunun kayıtlarını görüntülemek için zaten bir aracımız vardı, bu yüzden aracı bizim için günlükleri çevirmek için obfuscator tarafından üretilen ilişkilendirme tablosunu (gizlenmiş tanımlayıcıları uygun tanımlayıcılara eşlemek) kullanmak için değiştirdik, bu yüzden asla Alandan toplanan kütüklere dayalı ölüm sonrası muayeneler yaparken bile şaşırmış tanımlayıcıları görmek zorunda kaldım.


Bakım üzerindeki etkisi ne oldu?
Deworde

2
@deworde Yanıtlarımı, şaşkınlığın bakım üzerindeki etkileri hakkında bir paragrafla daha güncelledim.
Mike Nakis

@MikeNakis: Darkfall? :-)
Carson63000

@ Carson63000 Evet. (Avatarınızdaki LOL - bu zincirleme mi ve bir kılıç mı kullanıyorsunuz?)
Mike Nakis

@MikeNakis: güzel! Ve avatar üzerinde evet - peki, örme zincir posta ve tahta bir kılıç, çalıştığım şirket afiş reklamları için bazı varlıklar yapmakta ve modelleri işe almaktan ziyade giydirmek için çalışanlara yardımcı olmaktadır. :-)
Carson63000

3

Gizli kodu okumak ve anlamak (ve açıkça yazmak) ilginç bir zihinsel zorluk olabilir. Muhtemelen istediğin şeyin kapsamı dışında kalıyor , ancak IOCCC gibi örnekler korku yanı sıra bir eğlence kaynağı olabilir.


3
Bu gerçekten bir soru değil, bir cevap olmalıydı.
Dan McGrath
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.