it-swarm-tr.com

Javascript'i kötü amaçlı kod için nasıl tarayabilirim?

Herkese açık web uygulamamız için topluluk temelli uzantıları javascript'e yazma ve kullanıcıların uygulama örneklerini özelleştirmelerine izin vermeyi planlıyoruz. Sorun, uzantıların kalitesini izlemektir.

Bu işlemi otomatikleştirmek için ne önerirsiniz?

Veya Javascript'i kötü amaçlı kod için nasıl tarayabilirim?

Birkaç kelimeyle, kötü amaçlı olduğu için yüklenen uzantıları gerçek zamanlı olarak tarayacak antivirüs gibi bazı hizmetlere sahip olmak istiyoruz. Ve herhangi bir şüpheli kod tespit ederse bir uyarı oluşturur.

Herhangi bir ipucu/tavsiye açığız! Teşekkür ederim.

22
Igor

Bir yaklaşım, uzantının yürütülmesi kapsamında bu API'yı uygulayan nesneleri bildirerek, uzantıların kullanması için güvenli bir API tanımlamak olacaktır. Sonra uzantı kodunun korumalı bir Javascript sürümünde yazılmasını isteyin, böylece uzantı kodu yalnızca tanımladığınız güvenli API yöntemlerini çağırabilir ve başka bir şey yapamaz.

Dolayısıyla, API'nız api değişkeninde depolanan bir nesneden oluşuyorsa, kod:

var x = api.frob();
x.bar();

api güvenli API'nizin bir parçası olduğundan ve güvenli Javascript varyantları uzantı koduna maruz bırakılan API'yi başlatmanıza izin verdiği için uzantı koduna izin verilir.

Ancak, kod:

document.createElement("img");

document güvenli API'nizin bir parçası olmadığı için izin verilmez.

API'yi tasarlarken, açıkta kalan hiçbir nesnenin kötü amaçlı kullanılabilecek özelliklere sahip olmadığından emin olun. Bir kaynağa sınırlı erişim vermek için, kaynağa özel olarak başvuran işlevleri yapmak için kapanışları kullanın.

Bu amaçla kullanabileceğiniz Javascript'in korumalı bir sürümünü tanımlayan bir takım projeler var: SES , Caja , ADsafe , FBJS ve diğerleri. SES ve Caja, geliştiricilerin en az kısıtlamayla kod yazmalarına izin verir: sadece birkaç Javascript yazmak gibi, birkaç küçük kısıtlamayla (örneğin, eval, hayır with). ADsafe ve FBJS, geliştiricinin Javascript'in bir varyantını öğrenmesini gerektirir. SES, ADsafe ve FBJS en iyi performansa sahiptir. SES, çok yeni bir Javascript motorundan destek gerektirir ve bu nedenle bazı eski web tarayıcılarıyla uyumlu değildir. Uzantı kodu sunucu tarafında yürütülürse, Javascript motorunuzun güncel olduğundan emin olabileceğiniz için SES en iyi bahis olabilir. Uzantı kullanıcının tarayıcısında yürütülecekse, uzantı performans açısından kritik değilse Caja'yı veya varsa ADsafe/FBJS'yi düşünebilirsiniz.

9
JGWeissman

Javascript'i kötü amaçlı kod için taramanın iyi bir yolu yoktur. Yapamazsın. Sorun, kötü niyetli/haydut bir geliştiricinin kodlarında kötü amaçlı şeyleri gizlemesinin çok fazla yolu olmasıdır ve bunları asla algılayamazsınız.

Anti-virüs burada yardımcı olmuyor. Antivirüs yazılımının nasıl çalıştığını ve sınırlamalarını biraz anlamanız gerekir. Kabaca söylemek gerekirse, işte böyle çalışır. Anti-virüs şirketi birçok makineye bulaşan bir virüs tespit ederse, virüsü analiz eder, virüsün imzasını belirler (örneğin, kodunun bir alıntısı) ve bunu motorlarına yerleştirir. Daha sonra, makinenize söz konusu kopyanın bir kopyasından (analiz ettikleri kopyayla) bulaşırsa, virüsten koruma yazılımı bu imza yoluyla varlığını algılar. Sonuç olarak, antivirüs yazılımı öncelikle sadece yaygın olarak yayılan virüslere karşı faydalıdır. Mevcut anti-virüs yazılımı web uygulamanız için haydut bir uzantıda kötü amaçlı kod algılamayacaktır. Anti-virüs yazılımının bazı kullanımları vardır, ancak sizin özel senaryosunuz için işe yaramaz.

Bunun kodu tarayarak çözebileceğiniz bir sorun olmadığını kabul etmeniz gerekir. Yani, başka bir yaklaşım düşünmelisiniz. Seçenekleriniz neler? Bir kaç tane var:

  • Kaostan vazgeçip kucaklayabilirsin. Uzantılar için herkese açık bir site oluşturabilir, kullanıcıların uzantıları derecelendirmesine izin verebilir ve inceleme yayınlayabilir/görüntüleyebilirsiniz. Bu şekilde, bir geliştirici düşük kaliteli bir uzantı yayınlıyorsa veya bir şeyleri kilitlerse, fark eden kullanıcılar olumsuz bir inceleme yayınlayabilir. (Elbette, geliştirici kötü amaçlıysa ve kötü bir uzantı yayınlıyorsa, kimsenin fark edeceğini garanti etmez - şanslıysanız, belki de bazı kullanıcılar kötü amaçlı kodu bir şekilde fark edip size bildirir, ancak bu hiç kimsenin farkına varamayacağı kadar olasıdır.

    Bu, açık bir genişletme sistemine sahip olarak bilinir. Örneğin, bkz. Android Market veya Google Chrome Uzantı Galerisi veya Userscripts.org (bir Greasemonkey uzantı sitesi).

  • Uzmanların her bir uzantıyı herkese açık uzantı sitesinde yayınlanmadan önce (veya yayınlandıktan kısa bir süre sonra) incelediği bir tür inceleme sistemi oluşturabilirsiniz. Sadece kalite sorunlarını yakalamak istiyorsanız, uzmanların uzantıyı yüklemesini ve test etmesini ve belki de yaygın sorunları taramak için bir kod kalitesi hata bulma aracı çalıştırmanız yeterli olabilir. Ayrıca kötü niyetli uzantıları yakalamak istiyorsanız, inceleyen kişinin kodu okuyabilen ve uzantıyı satır satır okuyan bir geliştirici olması gerekir; bu son derece sıkıcı ve zaman alıcıdır, ancak daha iyi bir seçenek yoktur.

    Bu, iyileştirilmiş bir genişletme sistemine sahip olarak bilinir. Örneğin, Apple iOS App Store veya Firefox uzantı sitesine (addons.mozilla.org)) bakın, ancak kötü amaçlı yazılımları tespit etmemeye ve yalnızca kod kalitesine odaklandıklarına inanıyorum.

Hangi yaklaşımı kullanırsanız kullanın, uzantının yetkili sürümünü barındıran tek bir ortak uzantı sitesinden sunulan uzantılara önemli bir avantaj sağlar. Kullanıcıları söz konusu siteden uzantı yüklemeye teşvik etmek ve diğer sitelerden uzantı yüklemelerini engellemek için çeşitli adımlar atmak isteyebilirsiniz (örneğin, varsayılan olarak diğer kaynaklardan uzantı yüklemeyi devre dışı bırakın ve kullanıcının istedikleri diğer alan adlarını yetkilendirmek için tıklamasını isteyebilirsiniz. Firefox gibi yükleyin). Avantajı nedir? Bunun yararı, tüm kullanıcılarınızın uzantının aynı kopyasını almasını sağlamasıdır. Kötü niyetli bir web sitesinin, kullanıcının tarayıcı sürümünün ve kullanıcının nereden geldiğini kontrol etmek için bazı komut dosyaları kullandığı saldırıları önler ve buna dayanarak kötü amaçlı kod veya yasal kod sunup sunmayacağınıza karar verir - bu tür saldırılar kötülüğü tespit etmek daha zordur, bu yüzden onları durdurmak iyi bir şeydir. Ayrıca kullanıcıların incelemelerden ve derecelendirmelerden yararlanmasını sağlar.

Ayrıca hangi API'lerin uzantılara maruz kaldığını ve hangilerinin kullanılmadığını dikkatlice düşünmelisiniz. Uzantıların hasarı sınırlandırmanın bir yolu olarak doğası gereği sınırlı olması için API'nin yalnızca bir alt kümesini uzantılara maruz bırakmayı düşünebilirsiniz. Örneğin, Chrome tarayıcı, uzantıların web sayfasının DOM'si ve web sitesi ile etkileşime girmesine izin verir, ancak uzantıların yerel kod yürütmesine izin verilmez (örneğin, bir .exe kurup çalıştırmasına izin verilmez). Alternatif olarak, en yüksek riskli API'lardan kaçınan temel bir API sağlayabilir ve daha sonra temel API'dan daha fazlasına erişim gerektiren herhangi bir uzantıya gereksinim duymadan önce moderatörler tarafından onaylanması gerekir. halka açık site.

Kötü amaçlı uzantılara karşı bir başka olası savunma da izin sistemi getirmektir. Bir dizi izin tanımlarsınız. Uzantı, ihtiyaç duyduğu izin kümesini belirten bir bildirim içermelidir. Kullanıcı izni yüklediğinde, sistem kullanıcıya uzantının istediği izin kümesini ve bu izinlerin ne anlama geldiğini (ör. Hangi güvenlik/gizlilik risklerini oluşturduğunu, uzantıya hangi erişimi verdiğini) göstermelidir. izinleri onaylayın ve yüklemeye devam edin veya izinleri reddedin ve yüklemeyi iptal edin. Bu, kullanıcılara uzantılar üzerinde daha fazla kontrol ve görünürlük sağlar, buggy uzantılarının risklerini azaltır (çünkü bir uzantıdaki güvenlik açığının sonuçları artık tüm izinlerle değil, yalnızca istediği izinlerle sınırlıdır) ve kötü amaçlı uzantıları daha belirgin hale getirebilir ( çünkü zarar vermek için belirli izinler talep etmeleri gerekir). Bu tür bir duruma ilişkin örnek için bkz., Android uygulamalar veya Google Chrome uzantılar).

6
D.W.

(Kendi sanitasyon planınızı uygulamaya çalışmayın. JavaScipt'in karmaşıklığı göz önüne alındığında, evde pişirilen sanitasyon muhtemelen güvensiz olacaktır. Zaten iyi tespit edilmiş mevcut bir çözüm kullanın.)

Google'ın Caja Derleyicisi , üçüncü taraf HTML, CSS ve JavaScript web sitenize yerleştirmek güvenli.

Doğru hatırlamıyorsam, iGoogle için kullanıldı, çünkü güvenilmeyen kodu iframes olarak ayırmanın hala eksiklikleri vardı.

6
Bryan Field

Bunun kolayca otomatik hale getirilip getirilemeyeceğini bilmiyorum ve @ jfriend00 ve @slhck ile bu Javascripts'i başarıyla taramanın genel zorluklarına katılıyorum. Bununla birlikte, kötü niyetli komut dosyalarını tespit etmeye çalışan en az bir araç var.

Bu araç, Santa Barbara'daki California Üniversitesi tarafından işletilen Wepawet . Bu şekilde açıklanmaktadır:

Wepawet, web tabanlı tehditlerin analizi için bir çerçevedir. Wepawet bir web sayfasını ziyaret etmenin ziyaretçinin ortamını tehlikeye atma girişimine yol açıp açmayacağını belirleyebilir.

2
Andrew Lambert

IBM Appscan, " JavaScript Güvenlik Analizörü (JSA) " adında bir statik kod analiz modülüne sahiptir. Kesinlikle ücretsiz değildir, ancak Javascript kodunun güvenlik etkileri hakkında geri bildirim sağlar.

JSA'nın yanı sıra, güvenlik endişelerini aramak için başka statik kod analiz araçlarının farkında değilim, ancak daha fazla bilgi edinmek isterim. Belki JLint/JHint bazı güvenlik fonksiyonları eklediyse?

0
schroeder