Ruby on Rails ve Güvenlik – CSRF ve API Talepleri

CSRF ve Authenticity Token

Rails’te herhangi bir formdan POST request yaparken authenticity_token parametresi de gönderilmekte. Bu parametre CSRF saldırılarına karşı Rails’in kullandığı default savunma mekanizmasının bileşenlerinden biri. Aşağıda POST işlemi yapan örnek bir form bulunuyor, hidden field olarak authenticity_token gönderildiğini görebilirsiniz.

İşin hikayesi ise şöyle; Rails POST request’leri için user’ın session bilgisini temel alarak rastgele bir hash oluşturup bunu form içerisinde hidden field olarak ekliyor ve request esnasında gönderiyor. Oluşturulan token form submit edildiğinde diğer parametrelerle birlikte gönderiliyor ve web uygulaması tarafından işleniyor.

POST request’in akabinde web sunucumuz gönderilen token ile mevcut kullanıcının session bilgisini kıyaslıyor ve eşleşmeyen bir durum bulunduğunda bunu saldırı olarak kabul ediyor. Eğer Rails’in default davranışını değiştirmediyseniz request’in hataya düşmesi gerekiyor. Aşağıda POST işlemi yapan bir form görebilirsiniz. Henüz token’ı kurcalamadık.

POST işlemi yapan form
POST işlemi yapan form

Session’a erişme şansı olmayan bir saldırgan gibi davranıp token’ı değiştirelim ve neler olduğunu inceleyelim (Token’ın son 2 karakteri olan “==” karakterlerini “??” olarak değiştirdim):

Parametreleri değiştirilmiş form.
Parametreleri değiştirilmiş form.

Sonuç olarak beklendiği üzere uygulama exception’a düştü ve hata verdi =>

Rails CSRF protection

Uygulamanın bu davranışı göstermesini sağlayan ise application_controller’da bulunan “protect_from_forgery” metodu.

Kod aslında yaptığı işi açıkça söylüyor. Diğer bir yandan da API’lar için null_session kullanmamızı öneriyor. Eğer uygulamanız içerisinde bir API barındıracaksanız protect_from_forgery with: :exception yaptığınız request’leri hataya düşürecek çünkü Rails authenticity_token’ı sizin request’iniz içerisine eklemeyecek. Deneyelim:

Konfigürasyon: 

API Request:

API Request Sonucu:

with: :exception ile uygulamayı hataya düşürme davranışına alternatif olarak reset_session ve null_session seçeneklerini de kullanabilirsiniz:

  • :reset_session – Oturumu sıfırlar.
  • :null_session – Request esnasında yeni boş bir oturum sağlar ancak mevcut oturumu sıfırlamaz.

Detaylardan bir kaç ilginç nokta:

  1. Yeni bir Rails uygulaması oluşturduğunuzda “protect_from_forgery” metodu with: :exception ayarlı olarak geliyor.
  2. Rails 4’te => “protect_from_forgery” metodunu tek başına çağırdığınızda default davranışı “reset_session” şeklinde. Bknz: source.
  3. Rails 3’te => “protect_from_forgery” metodunu tek başına çağırdığınızda default davranışı “null_session” şeklinde.

GET mi – POST mu?

protect_from_forgery metodu sadece POST metodu için çalışmakta. Diğer bir değişle GET request’i için CSRF koruması uygulanmıyor. Bu durum Rails kaynak kodu içerisinde şu şekilde ifade ediliyor:

“GET requests are not protected since they don’t have side effects like writing to the database and don’t leak sensitive information.”

Sonuç olarak GET request’lerine hassas bilgiler döndürmemek ve GET request’lerinden gelen parametreleri veritabanına yazmamak önem taşıyor. Eğer hatalı bir kurgu izlemiş ve veritabanı ile olan ilişkilerinizi GET üzerine kurmuşsanız öncelikle bu hatalı kurguyu değiştirmeniz gerekiyor.

API Uygulamaları ve CSRF

Web uygulamanız içerisinde API sunma niyetindeyseniz yukarıda bahsettiğim şekilde “with: :exception” API request’lerinizi hataya düşürecektir çünkü browser üzerinden yapılmayan request’lerde Rails authenticity_token parametresini request’e ekleyemeyecek. O halde hem API  request’lerini hemde normal uygulama request’lerini aynı anda nasıl güvende tutacağız?

1) JSON request’lerini protect_from_forgery’den muaf tut

Request =>

Response =>

Response içerisinde CSRF token’ın doğrulanamadığını söylüyor ancak :exception çalıştırmadığımız için ve default davranış “reset_session” olduğu için API requestimiz başarıyla çalışıyor ve yanıtını alıyor. Bu uyarı sadece loglanıyor ve client’ın sorgularına engel olmuyor. Diğer bir yandan form üzerinden POST yaparken token’ı değiştirirsek uygulama session’ı sıfırlayacak ve POST request’imiz iptal edilecek.

Request =>

Response =>

Bir önce ki POST request ile bu POST request arasında fark, ilk request’in /query yoluna yapılmış, ikinci request’in ise /query.json yoluna yapılmış olması. Dolayısıyla request bir JSON isteği olduğu için uygulama artık loglara token doğrulanamadı hatasıda basmıyor.

Dezavantaj => Eğer  :exception kullanmak istiyorsanız /query yolunun default davranışından fedakarlık etmeniz gerekecek çünkü uygulama bu yolda hata verecek.

Sonuç olarak vardığım en sağlıklı sonuç şu konfigürasyon ile oldu =>

2) API controller’larını protect_from_forgery’den muaf tut

Eğer API request’lerini idare eden controller sadece JSON sunuyorsa callback’lerden faydalanabiliriz. Eğer controller hem bir template render ediyor hemde JSON sunuyorsa CSRF korumasını kapatmak güvenlik zaafiyetine yol açacaktır.

Sadece index action’unu muaf tut =>

Controller’ı muaf tut =>

Diğer detaylar için metodun kaynak kodunu okuyabilirsiniz:

https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/request_forgery_protection.rb

 

Ruby on Rails ve Güvenlik – Routes

Rails uygulamalarında route’ların güvenliğini sağlarken Devise gibi authentication GEM’lerinin sağladığı helper’lardan ve lambda metodundan yararlanabilirsiniz. Örneğin sadece super_admin rolüne sahip kullanıcılara açık olmasını istediğiniz route’ları şu şekilde tanımlayabilirsiniz:

Artık admin/resque, admin/ip_lists ve admin/token_users yolları sadece super_admin’ler için erişilebilir olacak.

Model tarafında ise is_super_admin? metodunu şu şekilde tanımlı:

Selamlar.

Terminal Komut Geçmişi ve Güvenlik Sorunları

Temel Bilgiler

Default olarak son kullandığınız komutlar ~/.bash_history yolunda ki .bash_history dosyasına kayıt edilir.

Kaydedilmiş olan geçmiş komutları history komutu ile görebilirsiniz. Hangi kullanıcıyla login olmuşsanız, history komutu onun geçmişini getirir.

Kaç tane kaydın yapılacağını görmek için: echo $HISTSIZE

Geçmişi temizlemek için: history -c

Geçmiş komutları 1’den başlayarak listelemek için: history | more

En son kullanılan 10 komut: history | tail

En son girdiğiniz n tane komutu listeme: history n

Komut geçmişi içinde arama yapmak: CTRL + R

En son kullanılan komutu kısayol ile çalıştırmak: !e
(e ile başlayan en son çalıştırılmış komut hangisi ise onu tekrar çalıştırır)

En son çalışan komutu aynen tekrar çalıştırmak için: !!

En son ki komutun son kelimesini görmek için (çalıştırmak değil): !$

Güvenlik Sorunları

  • Birden çok kullanıcılı sistemlerde, herhangi bir kullanıcının bu dosyayı değiştirmesini güvenlik sebebiyle istemiyorsanız bash_history dosyasını append-only olarak belirtebilirsiniz.

cd /home/scriptkiddie/

chattr +a .bash_history

  • Aynı şekilde ~/.profile dosyasını da dokunulmaz yapmak isteyebilirsiniz:

chattr +i ~/.profile

  • Silmeye karşı koruma vb. daha detaylı güvenlik önlemleri için:

http://www.debian.org/doc/manuals/securing-debian-howto/ch4.en.html

  • plain-text olarak yazdığınız şifreler bash_history’den okunabilir:

mysqladmin -u root password 'yeni-sifrem'

Saldırgan bash_history‘den şifrelerinizi bu şekilde çalacaktır.

astalavista-hack-log
Astalavista hack-log’undan bir alıntı
  • .bash_history’yi tamamen disable etmek istiyorsanız:

rm ~/.bash_history -rf
history -c
export HISTFILESIZE=0
export HISTSIZE=0
unset HISTFILE

veya:

rm ~/.bash_history
ln /dev/null ~/.bash_history -sf

Devamı için: http://mewbies.com/how_to_disable_bash_history_or_limit_tutorial.html

Tweak

  • .bash_history‘de duplicate komutlarım kaydolmasın istiyorum ne yapayım?

~/.bashrc dosyasına şu satırı ekle: export HISTCONTROL=ignoreboth:erasedups

Tübitak – Ödüllü Kriptoloji Soruları

Geçen ay için ödüllü kriptoloji sorularını çözmüştüm. Cevaplar doğru olmasına rağmen, çekilen kurada bir şey kazanamamışım. Benim çözümlerim şöyleydi:

İlk soru, tipik bir asal sayı sorusuydu.

Cevap 1 :

Verilen asal sayı dizisi için: a(n)=p(p(n)) formülü kullanılır. Böylece genel asal sayı dizisinin bir alt dizisini elde ederiz.

a(1) = 3, a(1) = p(p(1)) = p(2) = 3
a(2) = 5, a(2) = p(p(2)) = p(3) = 5
a(3) = 11, a(3) = p(p(3)) = p(5) = 11
a(4) = 17, a(4) = p(p(4)) = p(7) = 17
a(5) = 31, a(5) = p(p(5)) = p(11) = 31
….
….

şeklinde a(13)’e kadar devam edersek;

a(13) = 179, a(13) = p(p(13)) = p(41) = 179

Cevap => 179.

İkinci soru sevimsiz sorular kategorisinden.

Cevap 2 :

Ayşe için verilen rakamların, sayı değerleri 2şer kez toplanır ve Bora elde edilir.

  • 1+2+7+7=17, 1+7=8 (Bora)
  • 1+5+4+9=19, 1+9=10 (Bora)
  • 1+6+2+7=16, 1+6=7 (Bora)
  • O halde Ayşe 1759 iken Bora;
  • 1+7+5+9=22, 2+2 = 4 olur.

• Ayşe için verilen rakamların, sayı değerleri 2şer kez çarpılır ve Güven elde edilir.

  • 1*2*7*7 = 98, 9*8 = 72
  • 1*5*4*9 = 180, 1*8*0 = 0
  • 1*6*2*7 = 84, 8*4 = 32
  • 4*8*1*2 = 64, 6*4 = 24
  • 2*5*0*6 = 0, 0 = 0
  • O halde Ayşe 1759 iken Güven;
  • 1*7*5*9 = 315, 3*1*5 = 15 olur.

Bora; 4 ve Güven; 15

Üçüncü soru daha önce örneklerini bulabileceğiniz bir açık-gizli yazı sorusu. Gruplama ve alfabeye öncelikli olarak bakılır genelde.

Cevap 3 :

Kelimeler 5erli gruplara ayrılır.

  • İlk beşerli için harfin alfabetik yeri + 1 adım
  • İkinci beşerli için harfin alfabetik yeri + 2 adım
  • Üçüncü beşerli için harfin alfabetik yeri + 3 adım

Şeklinde şifreli metin oluşturulur. Gizli yazı, açık yazıya çevrilirken ise tam tersi uygulanarak, “alfabede ki yeri – n adım” kullanılır.

  • A R T V İ — N A R H A — V İ D Ö R — T Y Ü Z M — K U Z E Y — Ü Ç Y Ü Z — M B A T I
  • BSUYJ — Ö C Ş İ C — A L G S T — Y C A Ç P — Ö A D I Ç — C H D C E — Ş Ğ G B O
  • İ S T A N — BULKA — DIKÖY — BEŞYÜ — Z M K U Z — E Y Ü Ç Y — Ü Z M D O — Ğ U
  • J Ş U B O — Ç V N M C — GKNSB — EHVCA — DRÖAD — İDCHD — Ç F Ş İ U — N Ç
  • K O C A E — L İ G E B — ZESEK — İZYÜ Z — M G Ü N E — Y İ K İ Y — Ü Z M B A — T I
  • L Ö Ç B F — NKHGÇ — CĞUĞN — MÇCA Ç — R J B S I — DOPOD — ÇFŞĞG — C Ö

Cevap 3: KOCAELİGEBZESEKİZYÜZMGÜNEYİKİYÜZMBATI

Başarılar.

Şifreleme Algoritmaları için Benchmark Testi

Merhaba,

Veritabanında plain-text olarak veri tutmak tehlikelidir, bu yüzden verilerimizi MD5-SHA gibi şifreleme yöntemleri ile şifrelememiz gerekebilir. Bu aşamada seçeceğimiz şifreleme metoduna karar vermek açısından bir performans testi yapmak gerektiğini düşündüm.

Öncelikle şu sayfayı güzelce bir inceleyin, elimizin altında bulunsun; http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html

Elinizde ki stringin, çeşitli kriptolama yöntemlerinde ortaya çıkarttığı hash hakkında bir ön görüşünüz olması için şu ufak uygulamayı inceleyebilirsiniz; http://www.serhatdundar.com/projeler/string-hash-generator.php

Uygulamayı incelemek ve indirmek için; https://gist.github.com/979613

Ufak bir kaç benchmark testi yapalım. Bunun için aşağıda ki uygulamayı kullanabilirsiniz;

Bu testten alacağımız sonuçlara göre en hızlı çalışan ve en yavaş çalışan metodları göreceğiz. Dolayısıyla hangi şifreleme algoritmasını kullanacağımıza karar vermemizde önemli bir rol oynayan performans etkenini kafamızda netleştireceğiz.

(Bu test 32 byte’lık veri için, 1000 kez tekrarlanmıştır…)

Sonuçlara göre md2-whirlpool-sha512 ve sha384 hala en yavaş çalışan kripto metodları olarak görünüyor. En popüler yöntemlere göz atacak olursak MD5 en hızlı olarak değerlendirebileceğimiz 2.sırada, SHA1 ise 5.sıradan yerini alıyor.

MD5 ve SHA1 algoritmaları uzun zaman önce çözüldü, 512bit’lik (64byte) ve 384bit’lik SHA algoritması ise hala çözülebilmiş değil.

Whirlpool algoritmasını da son zamanlarda oldukça duymaya başladık. AES tabanında geliştirilen bu algoritma tahtını kimseye bırakmıyor ancak kullanışlılık yönünden puanı oldukça düşük. Performans yönünden bu denli zayıf olması web uygulamaları altında kullanımı önünde büyük bir engel, bu durum ise popülerliğini düşürüyor.

Sanal Bilgi Anarşizminden Özgürlüğe Giden Yol ve WikiLeaks Devrimi

Önsöz

Son günlerde WikiLeaks ile daha çok tartışılır hale gelen sanal istihbarat, bilgi sızdırma ve illegalite nasıl oluyor da böyle büyük destek bulabiliyor? Türkiye’de bunun örnekleri var mıdır, yaşanmış mıdır? Bu tarzda bir oluşum için kullanılacak yasal dayanaklar ve etmenler nelerdir? Hangi firmalar bu anlamda size karşı sadakatini korur? Sınırlar nelerdir ve ne derece zorlayabilirsiniz? Bu yazımda biraz bu soruların cevabını vermek için çalışacağım.

Bilgi Anarşizmi

Anarşizm, (Yunanca an (-sız, olumsuzluk eki) archos (yönetici)’dan türetilmiştir, yönetcisiz anlamına gelir). toplumsal otoritenin, tahakkümün, erkin ve hiyerarşinin tüm biçimlerini bertaraf etmeyi savunan çeşitli politik felsefeleri ve toplumsal hareketleri tanımlayan sosyal bir terimdir. Anarşizm, her koşulda her türlü otoriteyi reddetmektir.

Wikipedia

İnternet üzerinde veya gerçek hayatta değerlendirecek olursak; bilgiye anarşizim açısından bakabilmek için sahipli ve sahipsiz olarak ayırabiliriz.

En basit düşünceyle, gizlilik değeri taşımayan, sahibinin üzerinde bencillik hissetmediği bilgi sahipsiz bilgidir ve sahibi tarafından paylaşılmasında sakınca görülmez. Gizlilik değeri taşıyan, çeşitli kişi-kurum-kuruluş tarafından sahiplenilmiş ve paylaşılması istenmeyen bilgi ise sahipli bilgidir.

Bilgi anarşistleri ise her türlü otoriteyi, tahakkümü ve hiyerarşiyi reddetme doğasından dolayı sahipli bilgiyi kabullenmez. Bilgi hiç kimsenin himayesi altında olmamalıdır, doğası gereği düşünce ürünü olduğundan dolayı özgür olmalıdır.

İnternet üzerinde paylaşılan sahipli bilgilerin bir kısmı bilgi anarşistleri, diğer bir kısmı ise istihbarat grupları tarafından paylaşılmaktadır.

Özetle;

Bilgi anarşisti, bilginin bir sahibi olmasına karşı çıkar ve düşünce ürünü olan bilgilerin doğası gereği özgürce paylaşılabilmesi için mücadele verir.

İstihbarat servisleri gibi kurumlar ise çeşitli çıkarlar ve hedefler uğruna, gizlilik dereceli veya sahipli diyebileceğimiz bilgileri paylaşır.

Wiki Leaks Devrimi – Anarşizm’den Özgürcülüğe

Julian Assange tarafından kurulan wikileaks, Pentagon’un, Amerikan ordusunun ve dünyanın çeşitli yerlerinden bir çok kurum-kişi-kuruluş’un belgelerini basın özgürlüğü adı altında özgürce paylaşıyor.

Amerika’nın aslında Afganistan savaşında başarısız olduğunu, binlerce sivili haksız yere katlettiğini içeren belgeleri paylaşması ile wiki leaks medyada daha çok yer almaya başladı.

Pentagon ve Amerikan ordusu bu durumdan oldukça rahatsız, ancak Julian’ı yakalamak sandıkları kadar kolay değil, iddialara göre Julian bir yerde ard arda iki gün kalmıyor, genellikle zamanının çoğunu havaalanlarında geçiriyor ve sürekli seyahat ediyor. Ayrıca sanıldığı gibi yanında dizüstü bilgisayar taşımıyor, valizinde bir masaüstü bilgisayar taşıdığı iddia ediliyor.

Son olarak Julian’in İsveç’te olduğu bildirildi. İsveç’in basın özgürlüğüne geniş haklar tanıması ve İsveç’te ki “Korsan Partisi”nin Julian’a destek olması sebebiyle Julian şimdilik güvende gibi görünüyor.

Korsan Partisini çokta küçümsememek lazım. Parti, Avrupa Parlamentosunun geçen yılki seçimlerinde %7.1 oy aldı.

1971 yılında Avustralya’nın kuzey doğusunda doğan, ancak kuruluşu 2006 yılına rastlayan Wikileaks, gizli, mahrem diye nitelendirilebilecek belgelerin ortaya çıkarılmasına odaklanıyor. WikiLeaks’ın dediğine göre :

“Bizim 3 amacımız var: basını özgürleştirmek, suiistimalleri ortaya çıkarmak ve tarihi yaratan belgeleri korumak!”

Wikileaks daha önce çeşitli kaynaklardan eline ulaşan ve şirketlerle hükümetlerin yolsuzluklarını ortaya koyduğunu ifade ettiği binlerce sayfa belgeyi internette yayımladı. Bunlar arasında 2007’de Irak’ta bir ABD  helikopterinin siviller üzerine düzenlediği saldırıyla aralarında iki Reuters muhabiri de olan 12 kişiyi öldürdüğü olayın videoları da var. Wikileaks bu filmi “Collateral Murder” (Ek Cinayet) olarak adlandırarak tavrını zaten ortaya koyuyor.

Belgeler arasında; Fransız birliklerin bir okul otobüsüne ateş açması, ABD’nin sivil bir otobüse ateş açıp “intihar bombacısı öldürdük” süsü vermesi, “dur” ihtarına uymayan sağır birinin vurulması ve Britanya birliklerinin Afkan bir generalin oğlunu öldürmesi gibi birçok belge bulunuyor.

Anasayfamda sağ kısımda görebileceğiniz üzere WikiLeaks hareketini destekliyorum.

Türkiye’den 30’un üzerinde leaks hareketine yazar olarak destek veren kişi olduğunu biliyorum, bu rakam daha fa fazla olabilir.

Eğer elinizde paylaşmak istediğiniz belgeler varsa ancak çeşitli çekinceler yüzünden bunları paylaşamıyorsanız WikiLeans’e bildirmeniz yeterli.

Dünyanın bir çok yerinden bu hareketin destekçileri mevcut. WikiLeaks bunu şöyle özetlemiş :

Wikileaks Çinli muhalif topluluklar ile ABD’den, Tayvan, Avrupa, Avusturalya ve Güney Afrika’dan gazeteciler, matematikçiler ve şirket teknikçileri tarafından kuruldu.

Oluşumu henüz tamamlanmakta olan genel Danışma Kurulumuz,cesur gazetecileri,mülteci topluluklarından temsilcileri,etik ve anti-bozulma kampanyacılarını (Transparency International’ın eski ulusal baskanı dahil),insan haklari kampanyacılarını,avukatları ve kriptografi uzmanlarını içeriyor.

Şu anda 1200+ kayıtlı gönüllümüz var,ama organizasyonal seviyede olmamız için daha çok insana ihtiyacımız var.

Peki Nasıl?

WikiLeaks tüm bunları yaparken nasıl oluyorda Pentagon ve Amerikan ordusu bu sayfanın erişimini iptal edemiyor? WikiLeaks’ın arkasında kimler var?

WikiLeaks ilk kurulduğunda alanında tek diyebileceğimiz bir hizmet sağlayıcısı ile çalışmaktaydı.

http://www.prq.se/ adresinden ulaşabileceğiniz servis sağlayıcının fiyatları oldukça yüksek, ancak size çok özel fırsatlar sunmakta.

PRQ size her alanda gizlilik sağlayacağını iddia etmiyor, yalnızca İsveç yasalarının esnekliğinden faydalanarak dünyada bir çok kişinin ihtiyaç duyduğu sanal özgürlüğü sağlıyor.

If it is legal in Sweden, we will host it, and will keep it up regardless of any pressure to take it down

PRQ

We defend your integrity to the end. With our discreet customer relations policy we don’t even have to know who you are, and if we do . we will keep that knowledge strictly confidential.

PRQ

PRQ’nun sayfasından alıntıladığım ibarelerden anlayabileceğiniz üzere, İsveç yasalarına göre yaptığınız iş yasalsa, sayfanızın kapatılması için yapılacak her türlü baskıya karşı sizin yanınızda olacaklarını temin ediyorlar.

Diğer alıntılamada ise kişisel bilgilerinizin güvenliğini koruyacaklarını, hizmet almak için kim olduğunuzu bile bilmeleri gerektiğini söylüyorlar.

PRQ’den domain hizmeti alırken bu işlemi anonym olarakta gerçekleştirebiliyorsunuz. Ancak anonym hizmet için iki kat bedel ödemeniz gerekiyor. Bu hizmeti aldığınızda sizden herhangi bir bilgi talep edilmiyor..

Daha detaylı olarak kendilerini böyle ifade ediyolar :

We are firm believers in freedom of speech, commerce, and the right to privacy and anonymity, and this is reflected both in our terms of service and in our actual actions. Unlike most providers, we will not disable your service under any circumstances unless it’s either not paid for, used for spamming, DoSing or other activities harming the network, is used for publishing very obviously illegal material like child porn, or if we’re ordered to by a Swedish court. We are not sensitive to pressure in the form of legal threats (we even have our own legal staff), bad press, campaigns, organized boycotts, angry mobs, etc. We host several very controversial websites, and have a spotless track record in regard to this.

We do not require knowing your name, address, etc, although it can be advantageous to have them in certain situations (and they are handled very carefully, always stored encrypted, our personnel screened throughly for trustworthiness, and can only be accessed from two dedicated workstations who like the main server also have encrypted harddrives). Neither do we require a written contract. The only thing we need to know about you to set up the service is which e-mail address that should receive the invoices. Logging is only done to the minimal extent required for trouble-shooting in case of problems, and thus we do not have any logs whatsoever of data traffic.

TLD: .com, .net, .org, .biz, .info, .us, .name:

Period Normal registration anonymous registration
1 year 150 SEK / 16 EUR / 20 USD 300 SEK / 32 EUR / 40 USD
2 year 280 SEK / 29 EUR / 37 USD 560 SEK / 59 EUR / 75 USD
3 year 400 SEK / 42 EUR / 53 USD 800 SEK / 84 EUR / 107 USD
5 year 600 SEK / 63 EUR / 80 USD 1,200 SEK / 126 EUR / 160 USD
10 year 1,100 SEK / 116 EUR / 147 USD 2,200 SEK / 232 EUR / 293 USD
TLD: .se:

Period Normal registration
1 year 150 SEK / 16 EUR / 20 USD
TLD: .nu:

Period Normal registration anonymous registration
2 year 600 SEK / 63 EUR / 80 USD 1,200 SEK / 126 EUR / 160 USD
3 year 900 SEK / 95 EUR / 120 USD 1,800 SEK / 189 EUR / 240 USD
5 year 1,500 SEK / 158 EUR / 200 USD 3,000 SEK / 316 EUR / 400 USD
10 year 2,800 SEK / 295 EUR / 373 USD 5,600 SEK / 589 EUR / 747 USD

Domain fiyatlarının oldukça yüksek olduğunu görebiliyorsunuz. Hosting paketi ise aşağıda ki şekilde :

Web package:- 1 GB disc space- 30 GB transfer/month- Support for PHP, CGI, SSI and MySQL (databases are included in your total disc usage)- SSL-support (requires: SSL-certificate and dedicated IP address)- DNS hosting- Any number of domains can be used under the same account (with the same web root directory)Price: 75 SEK/month8 EUR/month10 USD/month

Peki PRQ’den nasıl sipariş verebilirsiniz?

Sayfayı incelerseniz herhangi bir sipariş formu veya online satın alma seçeneği olmadığını göreceksiniz. Ülkemizden yapılacak alışverişlerde Wiretransfer, PayPal, Bankgiro, Postgiro yöntemlerini kullanabilirsiniz. Ancak dediğim gibi herhangi bir sipariş formu veya online satın alma seçeneği yok.

info@prq.se adresine hangi servisi istediğinizi, hangi iletişim metodları ile sizle iletişim kurulmasını istediğinizi, hangi para birimi ile ödeme yapmak istediğinizi belirterek, bilgi alabilirsiniz.

Mail atmak güvenli mi?

Benim aklıma düşen bu soruyu PRQ’de düşünmüş ve Public PGP key‘i paylaşmış.

(Fingerprint 8E83 393D ABD1 FAC4 A4BE 2281 C51C 08A4 4B29 DE6D [expires: 2011-01-21]) (previous keys are revoked and should NOT be used)

PGP ile iletişim kurarak, tüm iletişiminizi son derece güvenli bir şekilde şifreleyebilirsiniz.

WikiLeaks ilk kurulduğundan beri ve uzunca bir süre PRQ firmasından hizmet aldı, ayrıca yaptığım araştırmalar sonucunda Dynadot güvenlik sistemini kullanarak bir dönem bilgilerini gizlediklerini gördüm.

Şuan WikiLeaks’ın yayın yaptığı sunucu The Pirate Party‘ye ait sunucular. Pirate Party wikileaks’ın her durumda arkasında olduğunu açıkladı.

İsveç yasalarına göre ise WikiLeaks’ın yaptığı iş “basın özgürlüğü” yani yasal..

Bu yüzden WikiLeaks’ın kapanması gibi bir durum şuan söz konusu değil.

Anagram Oluşturma Programı – Python

Geçtiğimiz ay (Haziran) TÜBİTAK UEKAE’nin sorduğu ödüllü 3 sorudan 1 numaralı olanı anagram sorusuydu.

Soru şu şekildeydi :

İlk seçeneği çözen ufak bir python uygulaması hazırladım :

İkinci seçeneği çözen bir program da hemen hemen aynı mantıkla hazırlanabilir. Şuan için onu hazırlamayı düşünmüyorum.

Bu uygulamadan aşağıda ki gibi bir çıktı elde edeceksiniz :

(Büyük ve küçük harflerin farklı karakterler olarak yorumlandığına dikkat edin!)

Bir tek son soruyu çözememiştim 🙁 Çok basitmiş aslında soru ama ben hiç o açıdan bakmamıştım, derin matematik hesaplarına girdim, hiç alakası yokmuş.. Neyse bu ay için zorlayalım biraz.

HCP Protokolü ve URL Validation Zaafı

10 Haziran 2010 tarihinde Windows XP’leri etkileyen ciddi bir zaaf keşfedildi, bu zaaf sadece Windows XP ve Server 2003’lere etki etmekle beraber, HCP protokolünü kullanmakta. Üstelik HCP protokolünün yarattığı ilk zaafiyet de değil bu. 2003 yılında “KB825119” ismiyle yayınlanan güncelleştirme paketi de yine HCP protokolü kullanılarak, saldırgan tarafından hazırlanmış bir URL’nin kurbanın bilgisayarında çalıştırılması ve zaafın exploit edilmesiyle sağlanan uzaktan kod çalıştırabilme açığını düzeltmek için yayınlanmıştı.

Ben blogumda 12 Haziran günü “Ne Kadar Süre Tanımalıyız” başlıklı yazımda bu durumdan bahsetmiştim, 18 Haziran’da ise Milliyet Gazetesi‘de bu olay haber oldu.

Helpctr Nedir?

Helpctr.exe dosyası parametresiz kullanıldığı taktirde, Windows XP’de Windows Yardım ve Destek Merkezini başlatır.

Parametreli kullanımda sözdizimi ise şu şekildedir : helpctr [/url [URL]] [/mode [URL]] [/hidden] [/fromstarthelp]

Parametreleri inceleyecek olursak:

/url[URL] Windows Yardım ve Destek Merkezi altında görüntülemek istediğiniz yardım sayfasının URL’sini girebilirsiniz.

/mode[URL] Windows Yardım ve Destek Merkezi’nin düzen, sözdizimi ve içeriğini kontrol eden Launch_Description.dtd şeması ile çalışan bir XML tanım dosyası belirtir.

/hidden Bir arayüz göstermeksizin Windows Yardım ve Destek Merkezi’ni başlatır. Bu komut ile bir yardım konusu yine arayüz gösterilmeden yüklenebilir. Uzaktan yönetilen script çalıştırma işlemlerinde kullanılabilir (sistem yöneticileri vs.)

/fromstarthelp : Yardım ve Destek Merkezi’nin yeni bir kopyasını başlatır.

/? : Komut satırında yardım seçeneklerini görüntüler.

Uyarı : [URL] içerisinde belirteceğiniz URL’leri, süssüz çift tırnak içerisinde de belirtebilirsiniz. [“www.serhatdundar.com”] gibi.

HCP Protokolü Nedir?

HCP; Windows XP altında ki “Windows Yardım ve Destek Merkezi” için kullanılan bir protokoldür. HCP prokolünü içeren çeşitli URL’ler sayesinde Yardım ve Destek Merkezi’nin çeşitli yönetim birimlerine kısayoldan ulaşılabiliyor.

Bu URL’lerden bir kısmını örneklemek gerekirse :

Geniş çevreler tarafından kullanımının güvenli olduğu düşünülen HCP protokolü; kayıtlı komut satırı parametresi olan /fromhcp ile çağırıldığında yardım merkezi uygulamasına geçer. Bu yöntem ile yardım merkezi uygulaması, sadece bir takım yardım dökümanı ve parametrenin çalışmasına izin veren kısıtlı bir modda açılır.

Service Pack 2’de dahil edilen bu metod bize; daha güvenli bir yol olan, güvenilir online dökümanların bir listesi ile çalışma imkanı tanır. (whitelist)

Bu hata çok kötü bir durummuş gibi görünmese de, kodun ileri ki kısımlarında /fromhcp whitelist’in den kaçmak için hatalı işlemler döndürmemize olanak sağlıyor.

Doğal yollardan herhangi bir yardım dökümanına erişebildiğimizi farzedersek (MPC:: hataları ile bu dökümana erişme yolları ileri de anlatılacak), bu dökümana erişimde kullanılan, tamamen URL üzerinden kontrol edebileceğimiz bir döküman önceden tanımlı olmalı (Yazı içerisinde ki HCP Protokolü Nedir? kısmı emsal alınabilir). Peki ya daha önceden tanımlanmamış bir dökümana aynı yollardan erişmek istersek?

Standart install işlemi ile yüklenmiş dökümanlara göz attıktan sonra, bunu yapmanın tek yolunun bir XSS (Cross Site Scriptin) hatası olduğunu anlayabiliriz. Dikkatli bir incelemeden sonra böyle birşey keşfedebilirsiniz :

Bu yardım dökümanı standart windows yüklemesi sonucu bize hazır olarak geliyor ve sysinfo/commonFunc.js scriptinin içindeki GetServerName() fonksiyonunun yetersiz kaçış ve filtreleme özellikleri yüzünden bu sayfa DOM-type XSS saldırılarına maruz kalıyor. Eğer en baştan, ‘=’ (eşittir), ‘”‘ (çift tırnak) veya diğer karakterler tanımlansaydı, kaçış ve filtreleme özellikleri ile encode işlemi sonlandırılabilirdi.

Bu hatanın hala exploit edilebilir olduğu kesinleşmiş değil, <img src=zararliicerik onerror=kod> ve <script>kod</script> gibi basit hileler hiçbir işe yaramıyor. Bu gibi durumlarda browser güvenliği adımlarını dikkatlice inceleyip analiz etmek işimizi görebilir. Özetle belirtmek gerekirse; alışık olduğumuz XSS saldırı metodları işe yaramadı ve alternatif yollar aramaya koyulduk.

Bu adreste anlatılan IE’ye mahsus “defer” özelliği ile problemi çözebiliriz. Şimdi bu ufak hileyi öğrendik ve bu hile ile basitçe komut çalıştırabileceğimizi biliyoruz çünkü bu yardım dökümanı ayrıcalıklı alanda (whitelist) barınıyor.

Komut satırında, aşağıda ki şekilde bu öğrendiklerinizi test edebilirsiniz :

Şuan yaptığımız işlem bir açıktan ziyade eğlence gibi dursada, bu işlem 3.parti güvenilmeyen bir yazılım tarafından size yaptırılırsa hiçte eğlenceli olmayabilir. Belirttiğimiz işletim sistemleri üzerinde (Windows XP ve Server 2003), IE (8 ve üstü), Firefox ve Chrome ile hcp:// URL’lere erişmeye çalıştığınızda muhtemelen başarılı bir sonuç alacaksınız. Bir çok kullanıcı hcp:// protokolünün güvenli olduğunu düşünür ve hcp URL’lere tıklamaktan çekinmez.

Windows XP üzerinde çalışan tüm browser’ların bu zaaftan kaçabilmesi için bir yol var aslında. ASX HtmlView elementi içinde ki bir <iframe> nesnesi ile hcp protokolünü çağırarak sorunu çözebiliyoruz. (bknz:ASX)

Saldırı yaklaşık olarak şu şekilde görünecek :

Starthelp.html ise şu şekilde olabilir :

Bir kullanıcının .asx dosyasını okumasını sağlatmak için, javascript kullanabiliriz :

Ne Kadar Süre Tanımalıyız ?

Dün technews’te gözüme çarpan ilginç bir haber vardı. İnternette güvenlik platformlarında da oldukça tartışılan bir konu oldu şu iki gündür. Konu; güvenlik açığı bulunduğu zaman bunu internette paylaşmadan önce ilgili firma veya kuruma ne kadar zaman tanınması gerektiği :

Haberi özetlemek gerekirse :

Google Research çalışanlarından Tavis Ormandy isimli şahıs Microsoft XP ve Server 2003’te uzaktan kod çalıştırılabilmesine ilişkin bir zaaf keşfediyor.

Bu zaafı Microsoft’a resmi yollardan bildiriyor ve 4 gün boyunca bunu paylaşmıyor, buqtrack’e düşürmüyor, 4 günden sonra (doğal olarak) açığı paylaşıyor. Bu durum sonrasında Microsoft, açığı incelemeleri ve muhtemel güncelleştirmeleri yayınlamaları için sadece 4 gün tanıdığı için Tavis’e oldukça sert tepki veriyor.

(Tavis’in bulduğu zaafı buradan inceleyebilirsiniz)

“Microsoft Yardım ve Destek Merkezi” teknik sayfalarında, bu hizmetin sadece kullanıcılara güvenli dökümentasyon ve parametre sağlamak için kullanıldığını belirtiyor, oysa ki HCP protokolü kullanıldığı zaman URL’ler düzgün şekilde yorumlanamayabiliyor. HCP sayesinde çalıştırılan bir URL ile “Microsoft Yardım ve Destek Merkezi”ne erişim sağlanıyor. Burada belirtmek lazım ki bütün browserlar HCP protokolünü desteklemiyor. Bu olaydan sonra bir çoğu artık bu protokole destek vermeyi kesti. Şuan Opera ve Firefox bu protokolü tanımıyor, sorun çıkartan yine Internet Explorer..

Eğer saldırganın hedefinde ki kullanıcı; yönetici yani administrator hakları ile sisteme giriş yapmış ise, bu açık sayesinde saldırgan tüm sistemin erişimini ele alabiliyor. Microsoft yayınladığı duyuru da şöyle diyor :

“Saldırgan yeni programlar yükleyebilir, bilgilerinizi görebilir-değiştirebilir veya silebilir ve bütün kullanıcı haklarına sahip yeni bir kullanıcı hesabı oluşturabilir.”

Microsoft bu kadar büyük bir zaaf yaratacan durumu gözden kaçırdığı için kendisine kızmak yerine Google’a tepki veriyor, açığı bulan güvenlik uzmanının en az 30 gün süre tanıması gerektiğini, en acımasız güvenlik uzmanlarının bile 14 gün süre tanıdığını, 4 günün böyle bir açığı teşhis ve tamir etmek için yeterli olmayacağını belirtiyor.

Daha önce 23 Mart’ta CanSecWest’in bulduğu Safari, Firefox ve IE kullanıcılarını etkileyen ciddi bir güvenlik açığı, Firefox tarafından 10 gün içerisinde, Safari tarafından 1 ay içerisinde, Microsoft tarafından ise 3 ay içerisinde fixlenmişti.. Bu olayı da hatırlayınca acaba diyorum Microsoft kuru gürültümü yapıyor? Tavis eğer 15 gün verseydi, bir açığı 3 ayda anca fixleyebilen Microsoft bu sefer ne yapacaktı çok merak ediyorum.

Microsoft Sysinternals AccessChk v.5.0

Öncelikle Sysinternals nedir kısaca bahsedeyim.

Mark Russinovich ve Bryce Cogswell adında 2 yazılımcı 1996 yılından 2006 yılına kadar yani 10 sene boyunca Microsoft Windows için çeşitli ufak sistem yazılımları hazırladılar. Bu yazılımlar oldukça pratik ve kullanışlıydı ve birçok kişi tarafından beklenenin üzerinde sevildi. Tüm bu gelişmelerden sonra Microsoft 2006 yılında Sysinternals‘i satın aldı.

Benim Sysinternals ile tanışmam ise sadece Windows üzerine geliştirilmiş, ufak, kurulum gerektirmeyen güvenlik pratiklerinde yardımcı programlar ararken oldu.

Kaldı ki benim sysinternals ile tanışmam seneler önceydi.. Bu grubun yazdığı yazılımlar ilgili 2 yazımda mevcut , bunlara “articles” bölümünden “IT Related” seçerek ulaşabilirsiniz.

AccessChk Nedir?

AccessChk ufak bir sistem yazılımıdır. Sistem yöneticilerinin işini kolaylaştırmak için kodlanmıştır. Sistemde ki kullanıcıların veya kullanıcı gruplarının hangi dizinlere, kayıt anahtarlarına (regedit), global nesnelere ve Windows servislerine erişim hakları olduğunu görmelerini sağlar.

AccessChk 5.0 sürümünü bu adresten indirebilirsiniz.

AccessChk kurulumsuz, executable bir programdır. Kullanmak için .exe dosyalarını çalıştırdığınız dizine taşımanız yeterlidir.

Bilgisayar:/SistemBirimi:/Windows şeklinde dizine taşıyın.

Komut istemi‘ni açıp, accesschk yazmanız programı çalıştırmak için yeterli.

Program çalıştığı zaman karşınıza aşağıda ki resimde gördüğünüz gibi program komutlarının listesi gelecek :

Kullanımı

accesschk [-s][-e][-u][-r][-w][-n][-v][[-a]|[-k]|[-p [-f] [-t]][-o [-t <object type>]][-c]|[-d]] [[-l [-i]]|[username]] <file, directory, registry key, process, service, object>

-a Bir Windows hesap yetkisi ismini belirtir. * karakterini bütün kullanıcı hesap yetkilerini kapsamasını istediğiniz zaman kullanın. Bir yetki ismi girdiğinizde sadece bu yetkiye sahip kullanıcı veya kullanıcı gruplarının listeleneceğini unutmayın.
-c SSdpsrv gibi herhangi bir Windows servisinin ismini belirtir.  Yıldız (*) karakterini kullanarak tüm servis isimlerini belirtebilir ve servis yöneticisinin de (scmanager) güvenlik yetkilerini sınayabilirsiniz.
-d Sadece işlem birimlerini veya üst düzey anahtarları belirtir.
-e Sadece net bir şekilde set-Integrity seviyelerini gösterir. (Sadece Windows Vista’da geçerli)
-f Kullanıcı grupları ve ayrıcalıklı gruplarırdan bilgi alan tüm işlermleri gösterir.
-i Tüm erişim kontrollerinin listesi ekrana dökülürken, ACE’den miras alınan nesnelerin gösterilmesini engeller.
-k Bir kayıt defteri satırının ismini belirtir. hklm\software
-l Tüm erişim kontrol listesini gösterir. -i ile ACE’den miras alınanların gösterilmesini engelleyebilirsiniz.
-n Sadece erişimin engelli olduğu nesneleri gösterir.
-o Nesne Yöneticisi isim uzayındaki ana dizin ismidir. (Default olarak root). -t ve -s kullanılabilir.
-p İşlem veya PID ismidir. cmd.exe gibi. Yıldız (*) karakteri ile tüm işlemleri kapsatabilirsiniz. -f ve -t kullanabilirsiniz. Bunlarında açıklamaları mevcut zaten.
-q Sembolleri görmezden gelir.
-r Sadece okuma iznine sahip dosyaları gösterir.
-s Recurse
-t Nesne tipi filtresidir.
-u Hataları engeller.
-v Verbose
-w Sadece yazma izni olunan nesneleri gösterir.

Örnekler

Aşağıda ki komut ile Windows\System32 içerisinde ki sistem dosyalarından hangilerine power userların erişebileceğini listeler.

accesschk “power users” c:\windows\system32

Bu komut ile hangi Windows servislerinin kullanıcı grup üyelerinde yazma izni olduğunu görebilirsiniz.

accesschk users -cw *

HKLM\CurrentUser altında ki hangi kayıt defteri anahtarlarının, belirtilen kullanıcıya göre erişim izni olmadığını gösterir.

accesschk -kns msdundar\mruss hklm\software

HKLM\Software anahtarının güvenlik yapılandırmasını gösterir.

accesschk -k hklm\software

Herkesin değiştirebileceği global yani evrensel nesneleri gösterir.

accesschk -wuo everyone \basednamedobjects

Örnek olarak HKLM\Software anahtarının güvenlik yapılandırmasının bir kısmına bakalım :

HKLM\software\Symantec anahtarına,

Users grubu R iznine yani READ (okuma) izniyle sahip,

Administrators grubu RW iznine yani Rewrite (yazma) izniyle sahip.

Default sistem kullanıcısı doğal olarak RW izniyle sahip.

Çeşitli örnekler ve denemeler ile keşfedilmesi kolay bir yazılım.

M.Serhat DÜNDAR