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ış!
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.
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.
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.
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.
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])
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()
Ç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.
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.
16 comments
Peki sunum kumandasi bulabildinizmi
Hayır.
Peki programlama dili eğitimi vermeyi düşünür müsünüz ? Sizden böyle anlatımlar görmek güzel olurdu :)
Maalesef bu konuda ne motivasyonum ne de zamanım var.
Abi merhaba :) benim bir sorum var.Programlama dillerini öğrenirken kaynakların genelde yabancı oluyordur ama Türkçe kaynağın varsa verebilir misin teşekkür ederim :)
Maalesef yok.
Keşke hiç bitmeseydi dediğim nadir yazılardan bir tanesi.
Elinize sağlık.
Beğendiğinize sevindim.
Elinize sağlık, ufuk arttıran bir yazı.
;)
4
5
Kodları çözdükten sonra pi üzerindeki verici ile de yapılabilir.
vay be adamın dibisin. bunu sunum yapan hocalara yapmak lazım okulda sinir olduğun özellikle büyük konferanslarda ekran da birden hacked yazıyor ve rezillik üstüne rezillik kimin aklına gelir kumanda üzerinden bunu yaptığını. bu işi nokia symbianda yapan bi program var bluetooth üzerinden gerçekleştiren kumandaya para vermek istemeyen kullanabilir. yalnız usb crazyradio pahalıymış. peki mert hocam raspberry pi 3 deki frekans verici var onla yapabilir miyiz? gerekli kütüphaneler var mı bildiğiniz?
Araştırmak lazım, benim bilgim yok.
4.5