Et tu, CPCR-505 ?

If you are looking for an English version of this article, please visit here.

Yeni yeni sunum davetleri almaya başladığım 2012 yılının başında, ilk iş olarak kendime kablosuz bir sunum kumandası almaya karar vermiştim. Fiyat & performans açısından beni üzmeyecek bir tane ararken, Codegen CPCR-505 sunum kumandası ile karşılaşıp hemen satın almıştım. Emektar sunum kumandam ile geçmiş yıllarda çok sayıda keyifli sunumlara imza atmış olsam da, kendisinin Brütüs gibi beni arkadan hançerleyebileceğini öğrenmem meğer yıllar sonra ortaya çıkacak ve bu yazıya konu olacakmış!

Hacking Codegen Wireless Presenter

Kablosuz sunum kumandası ile sunum yaparken veya sunum yapan birini izlerken aklımı zaman zaman şu soru kurcalardı; “Sunumu izleyenlerden birisi, sunum kumandasını uzaktan hackleyerek sunumu sabote edebilir mi ?” “Mert sen biraz fazla Mr Robot dizisi izlemişsin galiba” diyenleriniz olduğunu duyar gibi olsam da, geçtiğimiz günlerde bunu öğrenmek için emekter sunum kumandamı yakından incelemeye karar verdim.

Sunum kumandasının üreticisi olan Codegen firmasının web sitesini incelediğimde, bu kumandanın 2.4 GHz frekans bandında çalıştığı net olarak ifade edilmişti. Kablosuz klavye ve farelerin de bu frekansta çalıştığını Casus Fare başlıklı blog yazım için yapmış olduğum araştırmalardan az çok bildiğimden dolayı, detaylı bilgi toplama adına USB alıcının içini açmakla işe koyuldum.

Hacking Codegen Wireless Presenter

Alıcının içini açtığımda karşıma nRF24LU1PA 2.4 GHz alıcı-verici çip çıktı. Çipin üreticisi olan Nordic Semiconductor’un web sitesinde bu çipe ait olan belgeye baktığımda, 125 RF kanal desteği, AES şifreleme desteği ve frekans atlamasına sahip olması ilk dikkatimi çeken noktalar oldu.

Hacking Codegen Wireless Presenter
Hacking Codegen Wireless Presenter

2015 yılında Black Hat Güvenlik Konferansı‘na gitmişken satın aldığım ve RF Dünyası ve Güvenlik Dünyası blog yazımda da kullanmış olduğum HackRF One cihazı sayesinde sunum kumandası ile bilgisayarıma taktığım USB alıcısının arasındaki haberleşmeyi HDSDR programı yardımı ile izlemeye başladım.

Hacking Codegen Wireless Presenter

Sunum kumandası frekans atlaması yaptığı için veri paketlerini nasıl yakalayıp, çözeceğim üzerine hindi gibi düşünürken Bitcraze’in Wiki sayfasında tam da aradığım konuyu işleyen bir yazı ile karşılaştım. Yazıda belirtilenleri harfi harfine uygulayarak sunum kumandası ile alıcı arasındaki fare hareketlerinden, sunum kumandasındaki çeşitli butonlara (ses yükseltme, azaltma vs.) basılınca oluşan çeşitli veri paketlerini (adres, boyut, veri) kolayca elde edebildim.

Hacking Codegen Wireless Presenter
Hacking Codegen Wireless Presenter

Sıra veri paketlerini sunum kumandasının alıcısına göndermek için hangi aygıtla, cihazla bu işi gerçekleştireceğime karar vermeye gelmişti. Hali hazırda elimde bulunan Arduino Uno R3 ve NRF24L01+ 2.4GHz alıcı verici modül ile bu işi gerçekleştirebilirdim. Bill Gates bir röportajında “Her zaman en tembel insanları işe alırım çünkü tembeller çok karışık işleri bile en kısa yoldan yaparlar.” derken beni kastetmiş olsa gerek ki Arduino, modül ve kablolarla şimdi kim uğraşacak diye hayıflanırken aklıma Casus Fare başlıklı blog yazımda kullandığım CrazyRadio PA USB aygıtı geldi. Python kütüphanesi sayesinde işletim sistemi farketmeksizin 5 satırlık bir kod ile istediğim alıcıya, dilediğim veri paketini göndermem oldukça kolay olacaktı. scan_channels() fonksiyonu sayesinde aşağıdaki kod ile 50-70 arasındaki kanallara (frekans atlama sebebiyle 50-70 arası kanallara göndererek veri paketinin alıcıya ulaşma şansını arttırdım.) ses yükseltme komutu içeren veri paketini gönderdim ve başarıya ulaştım. ;)

import crazyradio
r = crazyradio.Crazyradio()
r.set_data_rate(r.DR_2MPS)
# Alıcı/Verici adresi
r.set_address((0x27, 0x79, 0x70, 0x1D, 0x86))
# Ses yükseltme komutu
print r.scan_channels(50, 70, [0x02,0xE9,0x00,0x00,0x03])

Hacking Codegen Wireless Presenter

Tabii ses arttırarak veya azaltarak bir sunumu sabote etmek pek de mümkün olamayacağı için sunum kumandasının normalde göndermediği ancak sunumun kumandasının alıcısının desteklediği gizli komutları, deneme yanılma (brute-force) yöntemi ile tespit etmeye karar verdim. Bunun için de aşağıdaki Python kodunu yazdım.

import crazyradio
import time

r = crazyradio.Crazyradio()
r.set_data_rate(r.DR_2MPS)
r.set_address((0x27, 0x79, 0x70, 0x1D, 0x86))

def bruteforce():
    i = 0
    while i < 256:
        # Gi 
        payload = [2, i, 0, 0, 3]
        print "Sending payload", payload
        r.scan_channels(1, 128, payload)
        time.sleep(2)
        i = i + 1

bruteforce()   

Hacking Codegen Wireless Presenter

Çok geçmeden sunum kumandasında var olmayan ancak sunum kumandasının alıcısının desteklediği ve ekran parlaklığını azaltmaya yarayan aşağıdaki komutu keşfettim. Crazy Radio PA USB aygıtı ile bu komutu alıcıya birden fazla gönderdiğimde ekran parlaklığına okumayı oldukça zorlaştıracak seviyeye kadar indirebildim ki bu gerçekten bir sunumu sabote etmek için yeter ve artardı. :)


[2, 111, 0, 0, 3] # Ekran parlaklığını arttırıyor.
[2, 112, 0, 0, 3] # Ekran parlaklığını azaltıyor.

Hacking Codegen Wireless Presenter

Sunum kumandasının alıcısına şayet Casus Fare blog yazısında olduğu gibi klavye tuş basma komutları da gönderebilinirse durumun gerçek anlamda sistem güvenliğine tehlikeye atacak bir boyuta gelebileceğini de göz önünde bulundurarak sunum kumandamı bu çalışma sonunda emekli ederek, şifreli haberleşen bir sunum kumandası aramaya koyuldum.

Bunun gibi 2.4 GHz (ISM bandı) frekans bandında, şifresiz gerçekleşen benzer tüm haberleşmelerde (misal dronelar olabilir) bu tür veya benzeri güvenlik zafiyetlerinin ortaya çıkabileceğini de göz önünde bulundurmanızı hatırlatarak bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.