CoinHive Öldü mü? Cryptojacking Kaldı mı? (2017 - ~)

Ziyahan Albeniz - 04 Mart 2019 -

Web browser ile crypto mining fikri popüler hale gelirken; saldırganların CryptoJacking adı verilen yöntemle yeni kazanç modeli oluşturdular. Web site sahipleri, CryptoJacking saldırılarından ziyaretçilerini korumak için ne yapmalı?

CoinHive Öldü mü? Cryptojacking Kaldı mı? (2017 - ~)

CoinHive 2017 Eylül'ünde kendisini duyuran ve kripto para Monero'yu bir JavaScript kodu üzerinden mine etmeye imkân veren bir servis. Kısa sayılabilecek 18 aylık ömründen sonra geçtiğimiz günlerde 8 Mart itibari ile servisi sonlandıracağını duyurdu.

CoinHive öldü mü? Evet, muhtemelen cennete gidecek. Zira web, içerik üreticilerinin gelir modelleri CoinHive ile birlikte bir hayli değişti.

Behçet Necatigil "Kitaplarda Ölmek" şiirinde yazar ve şairlerin ölümü ile ilgili doğum tarihi tire ve ölüm tarihi olarak bir çırpıda yazıldığını ama bu sanatkarların tüm ömür ve eserlerinin işte bu küçük tirede yaşadığını belirtmişti. Şimdi bizler de bu tireye odaklanıp CoinHive'a, Monero'ya, içerik üreticilerin yeni gelir modeli olan crypto mining ve saldırganların iştahını kabartan CryptoJacking'e değineceğiz. Ve tabii ki CoinHive bitse de bitmeyecek bu vakaya karşı web güvenliği açısından ne gibi tedbirler alabileceğimizi tartışacağız.

Hazırsak başlayalım.

2013 yılında Nicolas van Saberhagen ByteCoin'den başlayarak pek çok coin'in altyapısında kullanılacak CryptoNote isimli protokolü yayınladı. ByteCoin'in mucidini bilmiyoruz zira bu şahıs da tıpkı ilham aldığı Bitcoin'in mucidi Satoshi Nakamoto gibi anonim bir kimlik ile Bitcointalk forumunda geliştirdiği kripto parayı duyurdu.

Aynı forumda nickname'ini Türkçe'ye "bugünümüze hamd olsun" olarak çevireceğimiz thankful_for_today adlı kullanıcı ByteCoin'in yayılım eğrisinden hareketle paranın yüzde 82'sinin hali hazırda piyasaya sürüldüğünü tespit etti. Bu kripto paranın belirli ellerde biriktiğine, yani bir merkezileşme tehlikesine işaret ediyordu. CryptoNote'un gelecek vaad eden bir protokol olduğunu farkeden thankful_for_today, CryptoNote'un öne çıkan özelliklerini Monero isminde yeni bir projede birleştirdi ve bu işe kendisi gibi sıcak bakan topluluğun da yardımı ile 2014 yılında görücüye çıkardı.

Önceleri BitMonero olarak anılan bu kripto para zamanla Monero olarak anılmaya başladı. Monero sadece gizlilik ve güvenlik değil, aynı zamanda komunitesinin eşitlikçi paydası ile bir karar daha vermişti. Monero madenciliği bilgisayarlar, telefonlar, tabletler ve pek çok web tarayıcıda mümkün olacaktı. Monero'ya sahip olmak isteyen biri ekipman maliyeti gibi engellere takılmadan kolaylıkla ekosistemin parçası olabilecekti.

ASIC'ler (Application Specific Integrated Circuit - Uygulamaya Özel Tümleşik Devreler) günün sonunda ekipman bağımlılığı ve sadece ekonomik gücü olanların elinde kripto paraları temerküzüne (merkezileşmesine) imkân sağladığı için Monero'da CPU-hard algoritmalar (örneğin SHA-256) yerine CryptoNight gibi memory-hard algoritma tercih edildi.

Monero'nun web browserlar dahil pek çok cihazda kolaylıkla mine edilebilme özelliği UNICEF Australia, BailBloc ve Change.org gibi kuruluşlara destek amacıyla kullanıldığı gibi, web site sahipleri tarafından bir gelir modeli olarak da kullanılabileceği fikri yaygınlaştı. Monero hakkında daha ayrıntılı bilgi için SerHack tarafından kaleme alınan Mastering Monero kitabını okumanızı öneririz.

İşte bunu herkes tarafından kullanılan bir servise dönüştürme fikri ile CoinHive kendi yıldızını parlatmış oldu.

Web sitenize ekleyeceğiniz bir script kodu sayesinde ziyaretçileriniz sizin yemek tariflerinizi okurken, Vloglarınızı izlerken sizler de bir yandan bu ziyaret esnasında ziyaretçinin açık kalan browserı üzerinden mine edilen Monero'lardan gelir elde edebilecektiniz.

Dünya kamuoyu bu yeni gelişmeyi The Pirate Bay'in reklam göstermek yerine, ziyaretçi browserlarında Monero mine ederek gelir sağlamayı tercih etmesi ile öğrendi. Her ne kadar The Pirate Bay bunu kullanıcılardan habersiz gerçekleştirip, yoğun tepkilere maruz kalsa da bir kere ok yaydan çıkmıştı. Dünya artık o eski dünya olmayacaktı.

Diğer yandan kötü adamlara da gün doğmuş, ele geçirdikleri sitelere CoinHive'dan edindikleri script kodunu koyarak bu sitelere yapılan ziyaretleri kendileri için kazanca dönüştürmeye başlamışlardı. Güvenlik terminolojisi de yeni bir tabir kazanıyordu, CryptoJacking.

Son kullanıcı için browser eklentileri kripto mining'e deva olsa da web sitesi sahipleri için başka bir çözüm gerekiyordu. Zira web uygulamalarımız artık ticaretimizin, işimizin ta kendisi idi. İtibardan tasarruf olmaz, ne gerekiyorsa yapılmalı idi.

Arkanızdan Nasıl Hançerlenirsiniz? Gerçek Dünyadan Veriler ile CryptoJacking

University of California, Riverside tarafından yapılan bir araştırmaya göre CryptoJacking'den her ay 10 milyon kullanıcı etkileniyor. Araştırmacılara göre birkaç vaka analizi dışında bu sahada doyurucu bir çalışma yok. Bunun sebeplerinden biri olarak da VirusTotal benzeri bir sistemin CryptoJacking için tasarlanmamış olmasına yoruyorlar. Web sitesi URL'ini verip, CryptoJacking kodu içerip içermediğini kontrol etme düşüncesi güzel bir fikir. Yeni araştırma alanları arayan gençler favlasın.

Araştırmacılar bu çalışma için 853 bin 956 web sitesi üzerinden 2770 tekil CryptoJacking örneği topladıklarını belirtiyorlar. Kötü haber şu ki bu sitelerin 868'i Alexa Top 100 binde yer alıyor.

Peki bu siteler, biz farkında olmadan tarayıcılarımızı kullanarak ne kadar para kazanıyorlar merak ediyor musunuz? Araştırmacılar bunun için bir de formül paylaşmış:

The Pirate Bay örneğini inceleyecek olursak:

Araştırmaya göre aylık ziyaretçi sayısı 211 milyon olan The Pirate Bay'de geçirilen süre 326 saniye.

formula

Kazanç = (Aylık Ziyaretçi x Geçirilen Süre x Hash Rate / Zorluk Derecesi ) x Ödül  

statistics

Araştırmaya göre 10 milyonu aşkın ziyaretçisi olan bir sitenin bu formüle göre aylık kazancı 1.7 milyon dolar.

CryptoJacking'e Karşı En Etkili Çözüm: CSP (Content-Security Policy)

CSP, web uygulamalarımızı başta XSS olmak üzere, bir dizi güvenlik zafiyetine karşı korumak için ek bir güvenlik katmanı sunmaktadır. Elbette cürmü, CSP'nin desteklendiği browser'lar kadardır. CSP ile web uygulamamızın hangi kaynaklardan script, stil, imaj ve ses yüklemesi yapılabileceğini kontrol edebilmekteyiz.

CSP'de kurallar tanımlarken whitelist (beyaz liste) olarak bilinen bir yaklaşım kullanılmaktadır. Whitelist yaklaşımı sayesinde, yalnızca kabul ettiğimiz kaynakları belirtip, bu kural ile eşleşmeyen tüm kaynakların kullanımını engelleyebiliriz. Bu kaynakların hangileri olacağını HTTP response'ları ile beraber döndürdüğümüz CSP talimatlarında belirtmemiz yeterli.

Content-Security-Policy: script-src 'self' https://apis.google.com

Örneğin yukarıdaki CSP talimatı sayesinde, web sayfamızda yalnızca kendi originimizden (self) ve https://apis.google.com üzerinden yüklenecek scriptlere izin veriyoruz. Inline script çağrıları, olay tetikleyicileri vasıtası ile script çalıştırmak bu durumda mümkün olmayacaktır.

CryptoJackingiçin CSP'nin script-src talimatı kullanılabilir.

Ayrıntılar için Netsparker Türkiye Blogu'nda yayınlanan Content-Security-Policy başlıklı makalemizi okuyabilirsiniz.

report-uri ile Adım Adım Takip Edin

CSP, sadece kaynak yüklemelerini kısıtlamakla kalmaz, arzu ettiğimiz takdirde, belirteceğimiz bir çağrı adresine, belirttiğimiz talimatlara rağmen gerçekleşecek ihlalleri raporlayabilir. Bunu yapmak için CSP'nin report-uri özelliğini kullanabiliriz. Böylece sadece CryptoJacking vakasını engellemekle kalmayacak, aynı zamanda end-point'lere gelen raporlar sayesinde saldırganların bu iş için hangi kaynaklardan script yüklediğini de öğrenebileceğiz.

Content-Security-Policy: default-src 'self'; ...; report-uri /my_amazing_csp_report_parser;

Bu belirtimle birlikte CSP, aşağıdaki gibi bir JSON datayı, belirttiğimiz adrese POST metodu ile gönderecektir.

{
  "csp-report": {
    "document-uri": "http://example.org/page.html",
    "referrer": "http://evil.example.com/",
    "blocked-uri": "http://evil.example.com/evil.js",
    "violated-directive": "script-src 'self' https://apis.google.com",
    "original-policy": "script-src 'self' https://apis.google.com; report-uri
http://example.org/my_amazing_csp_report_parser"
  }
}
  • document-uri: İhlalin olduğu sayfayı belirtir,
  • referer: Sayfamızın referer'ini belirtir,
  • blocked-uri: Bloke edilen kaynağı belirtir,
  • violated-directive: İhlal edilen güvenlik direktifini belirtir,
  • origin-policy: CSP direktiflerini belirtir.