Probely

27 dakikada okunur

Yazılımın geliştirme aşamasında ya da sonrasında uygulama güvenliğini test etmek için Uygulama Güvenliği Testi (Application Security Testing, kısaca AST) araçlarından CI / CD Süreçlerinde Uygulama Güvenliği yazımda sizlere bahsetmiştim. AST açarlarından DAST türü için Probely yazılımını uzun uzun test etme ve deneyimle fırsatı yakaladım.

Yazıma başlamadan önce bana Probely yazılımını deneyimleme fırsatı sundukları için CyberDistro ekibinden Mustafa Kemal BAYRAM Bey'e ve Mehmet Aydın GÜNEŞ hocama teşekkür ederim.

Bu yazımda sizlere Probely yazılımı nedir, Probely yazılımını nasıl kullanırız, Probely tarama ayarları nedir, nasıl ayarlar yapabiliriz, Probely tarama profilleri nedir, Probely raporlaması nedir, Probely Agent nedir nasıl kurarız, Probely entegrasyonları nedir, Probely API nedir, DAST olarak CI / CD sürecindeki yeri nedir, Azure DevOps CI / CD süreçlerine nasıl dahil edebiliriz gibi konuları sizlere aktaracağım.

Probely

Probely, Software as a Service (SaaS) olarak çalışan API'lar ve web uygulamaları için güvenlik açıklarını tespit etmeye odaklanan bir zafiyet tarama yazılımıdır.
Probely, 30.000'den fazla potansiyel güvenlik açığını tespit edebilir ve düşük bir false positive oranına (%0.1) sahiptir. Otomatik keşif özelliği sayesinde, belli periyotlarda domaininizi tarar ve bunların listesini çıkartır, eğer yeni bir kayıt varsa bunu bildirir. Ayrıca Probely PCI-DSS, SOC2, HIPAA, ISO27001 ve GDPR gibi güvenlik standartlarına uyumluluğu sağlamak için raporlar sunar.
Probely bir DAST aracıdır. CI / CD süreçlerine dahil ederek güvenlik testlerini yazılım geliştirme döngüsüne erken aşamalarda ekleyebilir, istersek üretim ortamında sürekli taramalar yaparak güvenlik açıklarını tespit edebiliriz.

Product — Probely
Probely is a web application and API vulnerability scanner for agile teams. Automate Security Testing by adding Probely into your SDLC and CI/CD pipelines.

Probely Yazılımını Nasıl Kullanırız?

Yazımın bundan sonraki başlıklarında hem Probely'de yer alan sayfaların içeriği hakkında bilgiler vereceğim hem de deneyimimi sizlerle paylaşacağım. Kullandığım hesap bilgileri CyberDistro ekibi tarafından sağlandı ve bu hesap Trial planına dahildir. Yazım; bir yandan ana domainim olan yekta.web.tr üzerinden olacak, bir yandan test ortamım olarak kullandığım anilyekta.com.tr domainim olacak.
plus.probely.app adresi üzerinden giriş sağlıyorum. Bu giriş ekranında probely tarafından size tahsis edilen email ve parola bilgisi ile giriş yapabilirsiniz. Burada SSO girişi de var. Ben, bana CyberDistro ekibinin verdiği hesap bilgileri ile Probely portalına giriş yapıyorum.

Dashboard

Beni bir dashboard ekranı karşılıyor. Bu dashboard ekranında benim Probely yazılımına eklemiş olduğum domainlerimle alakalı grafikler yer alıyor. Bu sayfada listelenen grafikler, belirli zaman aralıklarında bulunan güvenlik açıklarını temsil ediyor.

Discovery

Discovery sayfası probely tarafından sunulan varlık keşif sayfasıdır. Web uygulamaları ve API'leri tespit ederek, bu varlıkların güvenlik açıklarını fark etmeyi ve olası siber saldırılara karşı öncesinden fark etmemizi sağlıyor. Bu keşif sürecinde Probely; Cloudflare veya AWS platformları üzerinden DNS bölgelerini tarayabilir. Bulunan varlıklar üzerinde ağ ve port taraması yaparak, bu varlıkların web uygulaması veya API olup olmadığını belirler. Ardından varlıklar üzerinde ekran görüntüsü alır ve güvenlik puanı verir.

Ben yekta.web.tr adresimi ekleyeceğim fakat Cloudflare veya AWS ile bağlanmayacağım. Tek bir domainim olduğu için varlık keşfi tam olarak olmayacak. Sadece yekta.web.tr üzerindeki portları tarayacak. Yazımın ilerleyen bölümlerinde Cloudflare ile yaptığım entegrasyona ulaşabilirsiniz.

Add a domain seçeneğini seçip Next butonuna tıklıyorum. Benden Domain adımı isteyecek. Eğer bu domaine erişimde basic access authentication kullanıyorsanız "Has basic auth" tikini seçip kullanıcı adı ve bilgilerini girebilirsiniz.

Domain adının benim olduğunu doğrulamam için birden fazla seçenek geliyor ekranıma. Burada web siteme bir dosya atarak doğrulayabilirim, DNS kaydıma TXT veya CNAME ekleyerek doğrulayabilirim, web siteme meta tag ekleyerek doğrulayabilirim. Veya Assisted seçeneğini seçerek bu domainin benim olduğunu kanıtlamam için Probely ile iletişime geçebilirim.

Ben burada meta tag ekleyerek devam etmek istiyorum. İlgili meta tag'ini kopyalayıp yekta.web.tr adresimin headerına ekliyorum ve Verify butonuna tıklıyorum.

Probely domainin benim olduğunu hemen doğruladı.

Discovery sayfasına geri dönüyorum ve sağ üst köşede varlık keşfinin çalıştığını görüyorum. Bu aşamada yekta.web.tr adresim listede yer almıyor.

30 saniye kadar bekledikten sonra yekta.web.tr adresim varlık keşif sayfasına geliyor. Hatta burada iki tane yekta.web.tr görüyorum. Biri 443 portu üzerinden diğeri 8443 portu üzerinden. Üzerine tıkladığımda yekta.web.tr adresimin IP adresleri, Probely tarafından bulunan teknolojiler yer alıyor.
Bu aşamadan sonra headerıma verify için eklediğim meta tagini kaldırabilirim.

Security Headers

Burada score olarak bir harf puanlaması yapmamış. NA'nın yanındaki ikona tıkladığımda Security Headers adresine yönlendiriyor. Burada web sitem ile ilgili F verdiğini görüyorum :) Ghost blog ile ilgili eksik headerlarım ile sonra ilgileneceğim.

Not: ilgilendim :)

Add Target butonuna tıkladığımda buton Scan olarak değişiyor. İstersem direkt bu sayfadan sayfam ile ilgili zafiyet taramasını başlatabilirim, istersem targets sayfasından başlatabilirim.

Targets

Targets sayfasına geldiğimde yekta.web.tr adresim listenin en altında. Bu listenin sıralamasını sütunlara tıklayarak değiştirebiliyorum. Liste varsayılan olarak risk sıralamasına göre listelenmiş.

CyberDistro ekibinin eklediği farklı domainler de olduğundan search kısmına yekta yazarak filtreledim.

EXPORT butonuna tıkladığımda probely bize target listemizi, içerisinde tarama ayarları ile birlikte içeren bir dosya indirtiyor. Bu dosyayı istersek json, yaml veya csv uzantılı olarak alabiliyoruz. Test için kullandığım targetın yaml bilgileri aşağıdaki gibi. İçerisinde login bilgileri bile yer almaktadır.

IMPORT butonu ile target bilgilerimin olduğu bir dosyayı yükleyebiliyorum.

DOMAIN VERIFICATION butonu beni domainlerimin olduğu sayfaya gönderiyor.
ADD butonu buraya manuel olarak target ekleyebilmem için bir modal penceresi açıyor.
Ben Cloudflare veya AWS ile varlık keşif taramasını yapmadım. yekta.web.tr domainimi doğrudan ekledim. Fakat benim challengearea.yekta.web.tr isminde bir subdomainim var. Bu subdomaini yekta.web.tr verify'ı bende olduğu için ekleyebilirim.
Burada uygulayabileceğim seçenekler var.
Labels; target'ı etiketlemek için. Bir liste çıkartmak istediğimde etiketler sayesinde kolayca gruplayabilirim veya rapor kısmında sadece bu etiketi içeren targetları getir şeklinde listeleyebilirim.

Web app / API; Uygulamam bir web uygulaması ise bu seçeneği seçiyorum. Eğer API ise bu seçeneği seçiyorum. API seçtikten sonra API tipini belirtmem lazım. API tipleri olarak OpenAPI ve Postman Collection yer almaktadır. API URL kısmına da Şema URL’sini girmeniz veya şemayı yüklemeniz gerekmektedir (JSON ya da YAML formatında).

How to configure and scan an API | Probely Help Center
Configure Probely to scan an API defined by an OpenAPI or Postman Collection, including endpoints behind complex authentication schemes.

API ile ilgili en iyi bilgiyi help.probely sayfasından edinebilirsiniz.

Assign target to team; target'ı bir takıma atayabilirsiniz.
Scanning Agent; Eğer tarayacağınız web uygulama intranetinizde ise probely erişimini bir şekilde sağlamanız lazım. Bu sebeple intranetinize probely agent'ını kurmanız gerekecektir. Scanning Agent başlığıma buraya tıklayarak geçiş yapabilirsiniz.
Continue to configure authentication and other settings; bu tiki seçtiğimde Add butonuna tıkladığımda beni tarama ile ilgili ayarların olacağı sayfaya atacak.

Add butonuna tıkladığımda challengearea.yekta.web.tr adresini target olarak eklemiş olacağız ve beni bu target'ın ayarlar sayfasına atacak. Target'ın ayarlar sayfasısının içerisinde Authentication, Scanner, Profile, Extra Hosts, Reports, Technologies, Integrations sekmeleri yer alıyor.

Burada bir virgül koyup Discovery sayfasına dönüyorum. Target Settings ile ilgili ayrı bir başlıkla detaylı yazacağım. Ben domainimi eklediğimde challengearea subdomainim discovery sayfasında yoktu. Target olarak eklediğimde bu subdomainin discovery sayfasına geldiğini görebiliyorum.

Findings

Probely'nin tüm targetlarda bulmuş olduğu açıkları tek bir sayfada listelendiği yerdir. İlgili açığa tıkladığınız vakit o target'ın o açığının olduğu sayfaya gidersiniz.

Scans

Yapmış olduğu taramaların listelendiği sayfadır.

test.anilyekta.com.tr

test.anilyekta.com.tr adresimde IIS üzerinde Dot Net Core 8 ile yazdığım MSSQL'e bağlı bir web uygulama çalışıyor. Tek bir login box var, pin de 1997. Giriş esnasında pini sorgulamak için MSSQL'de bir tabloya bağladım, fakat bunu çok amatörce bağladım ve SQL Injection açığı bıraktım.

Giriş yapınca aşağıdaki ekran beni karşılıyor.

Target Settings

Authentication

Probely'de Target settings sayfasına geri dönüyorum. Authentication sekmesinde "LOGIN CONFIGURATION" ayarı var. Probely benim web uygulamama giriş yapabilmesi için buraya bir login bilgisi girmem gerekli. Yoksa login ekranını geçemez ve tarama sadece giriş ekranından ibaret olur.

Burada field bilgisini nasıl olması gerektiği ile ilgili bir örnek göstermiş. Siz de kendi web uygulamanızda bu bilgiyi almak isterseniz sayfanın kaynak kodunda ilgili input boxların özelliklerine ulaşabilirsiniz.

How to set up Target Authentication with a Login Form | Probely Help Center
Learn how to configure Probely to scan behind your target’s login page.

Login Formu nasıl geçebileceğiniz ile ilgili daha detaylı bir bilgi Probely sayfasında yer almaktadır.

Burada takıldınız diyelim, input boxdaki bilgileri alamadınız veya bir karışıklık var; Probely'nin çok güzel bir çözümü var. Tarayıcınıza kuracağınız Probely Sequence Recorder eklentisi ile alacağınız json bilgilerini buraya girebiliriniz.

0:00
/1:10
Probely’s sequence recorder browser plugin | Probely Help Center
Record login and navigation sequences to feed Probely’s crawling and scanning engine.

İki Faktörlü Kimlik Doğrulama için çözümleri var. Fakat benim burada sizlere önerim Probely'nin geldiği IP adresini İki Faktörlü Kimlik Doğrulamadan muaf tutmanız.

How to set up Target 2FA with TOTP | Probely Help Center
Learn how to set up the scanner to log into targets with Two-Factor Authentication (2FA) using a Time-based One-time Password (TOTP).
How to set up Target 2FA using an alternative OTP | Probely Help Center
Learn how to set up the scanner to log in to targets with Two-Factor Authentication (2FA) using an alternative One-time Password (OTP).

Probely web uygulamanıza login olduktan sonra erişebileceği her URL'e erişmeye çalışır, kendi algoritmasında bir harita çıkartır. Fakat bir sayfayı denerken logout olursa bunu algılayamıyabilir. Logout detection eklemeniz taramalar için daha sağlıklı olacaktır.

Basic Auth, target'ı eklerken bu seçenek vardı, sonradan eklemek isterseniz veya düzenleme yapmak isterseniz buradan erişebilirsiniz.

Scanner

Navigation Sequences: Tarama esnasında belirli bir işlemi özellikle yapmasını istiyorsanız bu ayarı kullanabilirsiniz. Probely'nin Sequence Recorder eklentisi ile işlemleri kayıt altına aldıktan sonra yüklemeniz gereklidir. Birden fazla sequence yükleyebilirsiniz.

  • On demand scans must only run navigation sequences: Bu tiki seçerseniz sadece yüklediğiniz sequence kayıtlarını yapacaktır.
  • Scheduled scans must only run navigation sequences: Bu target ile ilgili bir zamanlanmış tarama ayarlarsanız sequence kaydı bu taramada çalışmıyor. Eğer zamanlanmış taramalarda da sadece sequence kaydı çalışsın isterseniz bu tiki seçebilirsiniz.

Partial Scans: Reduced Scope: Tarama alanını kısıtlamak isterseniz bu ayarı kullanabilirsiniz.

Partial Scans: Incremental: Bu seçeneği seçerseniz taranmış ve güncellenmemiş URL'ler tarama alanına girmez.

Scanning Agent: Eğer web uygulamanız dışardan erişime kapalı ise intranetinize kuracağınız Probely'nin web uygulamanıza erişimini sağlayabilirsiniz.

Scanning Blackout Period: Probely taramalarının belli saatler arasında çalışmasını istemiyorsanız buradan ayar yapabilirsiniz.

Reject List: Tarama dışı bırakmak istediğiniz sayfaları buradan girebilirsiniz.

Seeds List: Tarama esnasında probely bir son kullanıcı gibi hareket eder, bir hacker gibi davranır. Eğer yönetici erişim panelim yekta.web.tr/yoneticipanelim şeklinde ise ve taramada bu URL'e bir bağlantı bulamazsa bu sayfayı tarama alanına ekleyemez. Bu gibi adresleri Seed listesine ekleyerek taramaya dahil edebilirsiniz.

Probely taramalarında gerçek kullanıcı davranışlarını taklit etmeye yardımcı olur ve hedef uygulamaların doğru ve güvenli bir şekilde test edilmesini sağlar. Bunun için Custom Headers veya Custom Cookies ayarlarını kullanabilirsiniz.

Profile

Profile sekmesi taramanız için daha öncesinde hazırlanan tarama profillerinin seçildiği sayfadır.

Extra Hosts

Extra Hosts sekmesi eğer web uygulamanızda kullandığınız APIlar farklı bir adreste ise bu adresi eklemenizi sağlar.

What are the extra hosts in scope for? | Probely Help Center
Extra hosts that you can add to the scanning scope

Reports

Reports sekmesi tarama sonunda size vereceği rapor ile ilgili bilgilerin yer aldığı sayfadır.

Technologies

Technologies sekmesi sizin web uygulamanızın kullandığı altyapının bilgilerinin içerdiği sayfadır. Probely bu target'ı ilk eklediğinizde tarayıp buraya ekleme yapıyor fakat spesifik olarak bir teknoloji belirtmek isterseniz de bu bilgileri düzeltebiliyorsunuz. Bu bilgiler ile tarama için kullanılan metadoloji değişiyor. Microsoft ASP.NET seçili olduğu için ASP.NET ile ilgili açıkları daha fazla tarayacaktır ve bunun sonucunda bulduğu açıklarda how to fix başlığı altında bulduğu açığı nasıl kapatabileceğinize yönelik o teknolojiye göre açıklamalar yapacaktır.

Integrations

Integrations sekmesi taramanın Jira, Azure, Slack, Jenkins gibi diğer platformlara aktardığımız sayfadır.

Scan Activity

Scan Activity butonuna tıkladığımda beni taramış ve bitirmiş olduğu target ile ilgili taramaların listesine yönlendiriyor. Buradan VIEW butonuna tıklayarak taramanın detaylarına girebilirim, veya PDF butonuna tıklayarak Standart, Executive Summary, PCI-DSS v4.0.1, PCI-DSS v.3.2.1, OWASP Top 10, ISO27001, HIPAA standartlarına uygun rapor dosyasını pdf formatında indirebilirim.

Scheduled Scans

Bu sayfanın ikinci sekmesi olan Scheduled Scans sekmesinde taramayı benim belirlediğim zamanlarda otomatik başlatabiliyorum.

Zamanlanmış taramanın ayarları aşağıdaki gibidir.

Scan Profiles

Probely, farklı tarama ihtiyaçlarına yönelik çeşitli yerleşik tarama profilleri sunarak kullanıcıların güvenlik testlerini özelleştirmelerine olanak tanır. Lightning, Safe, Normal ve Full, tarama süresi ve kapsamı açısından farklı amaçlara hizmet eder.

  • Lightning tarama profili, hızı ön planda tutar ve çok kısa sürede tamamlanarak SSL/TLS, HTTP başlıkları ve çerezler gibi alanlardaki güvenlik açıklarını tespit etmeye odaklanır.
  • Safe profili, hedef uygulama üzerindeki etkileri en aza indirmeyi amaçlar. Daha az sayıda yük kullanır ve yalnızca GET istekleriyle sınırlı kalır, ancak gerekiyorsa tarayıcı (crawler) POST gibi diğer yöntemleri kullanabilir.
  • Normal tarama profili, tüm desteklenen güvenlik açıklarını daha geniş bir yük setiyle test eder ve HTTP yöntemlerinde herhangi bir kısıtlama yapmaz.
  • Full profili ise Normal profildeki tüm testleri içerir ve daha da geniş bir yük yelpazesiyle en kapsamlı taramayı sunar.

Add Custom Profile

Probely kullanıcıların tarama profillerini ihtiyaçlarına göre özelleştirmelerine de olanak tanır. Özelleştirme seçenekleri arasında HTTP yöntemleri, tarama hızı, istek gecikmesi gibi ayarların yanı sıra tarayıcının tarayacağı URL sayısı ve tarama süresi için sınır belirleme imkânı bulunur. Ayrıca, tarayıcıda sayfa benzerlik algılama ve URL desen algılama gibi özellikleri aktif veya pasif hale getirerek tarama verimliliği optimize edilebilir.

Kullanıcılar, özelleştirme sürecinde sıfırdan yeni bir tarama profili oluşturabilir, mevcut bir profili klonlayabilir veya önceden oluşturulmuş bir profili düzenleyebilir. Oluşturulan bu özel profiller, hedeflerin tarama ayarlarında listelenir ve ilgili hedeflere kolayca uygulanabilir.

GLOBAL

  • Target type(Hedef türü) - Bu tarama profili için kullanılabilir hedef türü: Web uygulamaları veya API'lar.
  • HTTP methods(HTTP yöntemleri) - Tarama isteklerinde kullanılacak HTTP yöntemleri. Safe metod içerisinde GET, HEAD, OPTIONS, TRACE ve CONNECT yer alır, All methods seçerseniz PATCH, PUT, DELETE ve diğer methodlar da yer alır
  • Scan speed(Tarama hızı) - Hedefin yanıt süresine göre tarama isteklerinin hızı. Hedefe aşırı yüklenmeden kaçınmayı ve tarama sırasında tüketilen kaynakları optimize etmeyi sağlar. Tarama hızı ne olursa olsun, Probely tarama sırasında hedefin isteklere yanıt veremediğini tespit ederse, tarayıcı otomatik olarak hızı düşürerek en iyi performansı sağlar.
  • Request delay(İstek gecikmesi) - Her tarama iş parçacığı arasındaki istekler için milisaniye cinsinden zaman gecikmesini ayarlayın. Bu, yaklaşık bir değerdir ve daha yavaş tarama hız ayarları için daha doğru çalışır. Maksimum izin verilen gecikme 5000ms'dir. Tanımlanmadıysa istekler arasında gecikme olmaz.
  • Limit scan duration(Tarama süresini sınırla) - Taramaya izin verilen maksimum çalışma süresi. Eğer ayarlanmazsa, süre sınırı yoktur. Bu ayarın kullanılması, taramanın bazı güvenlik açıklarını atlamasına neden olabilir.

CRAWLER

  • Crawler deduplication(Tarayıcı deduplikasyonu) - Probely, benzer sayfaları tespit etmek ve sadece birkaçı üzerinde tarama yapmak için Simhash algoritmasını kullanır. Bir sayfa, aynı HTML öğe yapısını paylaşıyorsa benzer kabul edilir. Bu özellik varsayılan olarak etkindir. Bu kutunun işaretini kaldırmak özelliği kapatır ve tarama süresini önemli ölçüde artırabilir.
  • URL pattern detection(URL desen algılama) - Probely, benzer sayfaları tespit etmek için URL’lerdeki desenleri algılar ve sadece birkaçını tarar. Örneğin, /2023-10-08-probely-scanner-finds-another ve /2022-03-18-cibersecurity-is-important gibi sayfalar /YYYY-AA-GG- ile başlayan ve tire ile ayrılan birkaç kelimeyle biten bir deseni paylaşır. Bu özellik varsayılan olarak etkindir. Bu kutunun işaretini kaldırmak özelliği kapatır ve tarama süresini önemli ölçüde artırabilir.
  • Maximum URLs crawled(Tarayıcı tarafından ziyaret edilen maksimum URL sayısı) - Tarayıcının ziyaret edeceği maksimum URL sayısı. Maksimum değer 50.000'dir. Varsayılan olarak bu sayı 5.000'dir ve kapsam ile tarama süresi arasında iyi bir denge sağlar.

SCANNER

  • Scan payloads(Tarayıcı Yükleri) - Güvenlik açıklarını test etmek için kullanılacak yüklerin ve başlıkların çeşitliliğini. Hedefin her URL'e yapılan tarama isteklerinin sayısını hassas bir şekilde ayarlamayı sağlar. Tarayıcı yükleri ne olursa olsun, test edilecek güvenlik açıkları aynı kalır.
    • Comprehensive: Çok nadir görülen durumları tespit etmek için daha kapsamlı bir yük kümesi içerir. Tarama süresi önemli ölçüde artar.
    • Normal: Tarama süresini aşırı artırmadan algılamayı en üst düzeye çıkaran bir yük kümesi kullanır ve iyi bir uzlaşma sağlar.
    • Limited: Normal'den biraz daha az yük kullanır, bu sayede en yaygın durumları tespit ederken tarama süresini kısaltır.
  • Vulnerabilities(Güvenlik Açıkları) - Tarayıcı tarafından doğrulanacak güvenlik açıklarını seçebileceğimiz ayarlar.

Probely Network Trafiği [Full Tarama]

Prod ortamındaki test.anilyekta.com.tr adresime bir tarama başlatmak istiyorum, fakat benim web adresim ile probely arasında Cloudflare WAF olduğundan öncelikle Probely'nin IP adresleri için WAF'da kural yazmam gerekli. Bu IP adresleri Probely'nin web sitesinde yazmaktadır.

What is the scanner’s outgoing IP address? | Probely Help Center
Outgoing IP address used by the scanner
Cloudflare WAF rule


test.anilyekta.com.tr adresindeki web uygulamam sadece 3 sayfadan oluşuyor. Input boxlar sadece giriş sayfamda mevcut, giriş yaptıktan sonra göstermelik bir sayfa açılıyor. Burada herhangi bir input box yer almıyor. Probely zafiyet taramasını Full profilinde başlatıyorum. Web uygulamam 3 sayfadan oluştuğu için 36 dakika sürüyor.
Probely 36 dakika içerisinde benim web uygulamama 27239 request gönderiyor. Bunlar sadece Cloudflare WAF'a takılanlar ve skip olarak geçenler. Bunları Cloudflare WAF'ında görebiliyorum.

Crawling Report aşağıdadır. Bu raporda hangi URL'leri dolaştığını görebiliyorum.

Örnek: SQL Injection Açığı

Target taranması ile ilgili tüm seçenekleri sizlere yazdım. Peki bulduğu açıklar.. test.anilyekta.com.tr adresimde bilerek SQL Injection açığı bırakmıştım.

SQL Injection ile ilgili bir adet CVSS skoru ekranımda yazmaktadır.
Path; SQL Injectioın'ın bulunduğu adres, buraya POST methodu ile bir request göndermiş. Request body ise password field'ında bu açığı bulduğunu yazmaktadır.
PCI-DSS ve OWASP listelerinde SQL Injection yer aldığı yazmaktadır.
Bu açık, bu target ile ilgili geriye dönük bir açık olabilir, bulunan açıklar target için silinmiyor, sadece durumu değişiyor. Bu durum bilgisi State olarak yer almaktadır. Labels kısmında bu target'ın bu açığını taglemeniz için. Daha sonrasında FINDINGS sayfasında bu taglediğiniz açıklara göre listelemeyi çok hızlı bir şekilde yapabilirsiniz. Assign ile bu targettaki açığın sorumluluğunu Probely'de takım arkadaşlarınıza atayabilirsiniz.
RE-TEST butonu ile sadece bu açık için taramayı başlatabilirsiniz. ACCEPT RISK butonu ile açığı doğrulayıp ama bununla ilgili herhangi bir aksiyon alınmayacağını belirtebilirsiniz. INVALID butonu ile bunun bir false positive durum olduğunu, açığın aslında olmadığını belirtebilirsiniz.
INVALID durumunda Probely'nin sizinle iletişime geçme ihtimali yer almaktadır :)

Bu targetın bu açığı ile ilgili log kayıtları yer almaktadır. Ne zaman bulundu, hangi taramalarda açık devam etti, açık fixlendi mi, açık tekrar bulundu mu şeklinde logları burada görebilir hatta buraya not ekleyebilirsiniz.

Probely how to fix sekmesinde size kaynak kodda şurayı düzeltin şeklinde bir seçenek sunamaz çünkü Probely bir DAST yazılımıdır. Fakat bildiği bir teknoloji ise örneklerle nasıl yapacağınızı yazabilir.
Evidence sekmesinde bulduğu açıkla ilgili kanıt bilgileri yer almaktadır. Request sekmesinde hangi sorguları gönderdiği ve Response sekmesinde hangi cevapları aldığı yer almaktadır.

Probely Desteği

DEVELOPER ortamımda web sitemdeki sertifika sorunu sebebi ile Login Failed oluyordum. 3-4 tarama yaptıktan sonra daha sonra bakarım diye bırakmıştım.

Bu durumu fark eden Martim bana Probely üzerinden mesaj gönderdi.

Bu bir test ortamı olduğu için Martim'e durumu bildirdim ve teşekkür ettim.

Probely burada yaptığınız taramaları, sonuçlarınızı, karşılaştığınız hataları gözlemliyor ve bir sorun olduğunu düşünerek sizinle iletişime geçebiliyor. Bir taramanızda açık buldu, siz bu açığın aslında bir açık olmadığını, bir yanlışlık olduğunu invalid seçerek kapattınız. Probely bunu değerlendirmeye alıyor. Bu değerlendirmeler sonucunda zaten false positive için %0.1 bir orana sahip olabiliyor.

Takıldığınız noktalarda da kendileri ile iletişime geçmek için mesaj gönderebiliyorsunuz.

Integrations ve Azure DevOps Boards Entegrasyon Örneği

Probely bir çok geliştirici ortam ile entegre edilebilir. Bunun için Integrations sayfasına girip istediğiniz entegrasyonu yapmamız yeterli. Ben burada kendi Azure DevOps ortamımı daha öncesinde entegre etmiştim. Bu entegrasyonu yapmam 30 saniye sürdü.

Azure DevOps Boards entegrasyonu yaptıktan sonra Probely için erişeceği Organizasyonu seçmem lazım. Bu seçme işlemini yaptıktan sonra target ayarlarından entegrasyon sayfasına dönünce bu sayfada organizasyondaki projeyi ve boards sayfasında oluşturacağı work item tipini seçmem lazım.

İlgili proje eşleştirmesini yapıp kaydettikten sonra daha önce bulduğu açıkları da Azure DevOps ortamındaki boards sayfasına açıyor.

Burada Probely ve Azure DevOps Boards sayfasının uyumu çok iyi. Açık ile ilgili Probely'de bir yorum yaptım, entegrasyonu sağladığım hesap üzerinden bu yorum Azure DevOps'daki Item'da da yer almaktadır. Azure DevOps'da Item'a yorum yaptım. Bu yorum Probely'deki açığın loguna da geçmektedir.

Hatta bir kullanıcı Azure DevOps'da Item'ı done olarak değiştirdiğinde Probely bunu Re-Testing yaparak gerçekten açığın kapatılıp kapatılmadığını test ediyor.

Ya da Targetla ilgili bir açık bulundu fakat bunun riskini kabul ediyorsunuz veya invalid durumuna çekmek istiyorsunuz. İlgili butonlara tıkladıktan sonra bu durum Azure DevOps Board sayfasında Item'ın done olarak değişmesine olanak sağlıyor.

Cloudflare Entegrasyonu

Varlık keşfi özelliğini tam anlamı ile kullanabilmek için cloudflare entegrasyonunu yapıyorum. Bu entegrasyon ile benim cloudflare accountumdaki domainler, bu domainlere bağlı DNS kayıtları hepsi discovery sayfama gelecek. Ve ben cloudflare'da bir DNS eklediğim zaman Probely Discovery taraması çalıştıkça Discovery sayfasına eklenecek.

Bunun için cloudflare token oluşturma sayfasına dönüyorum ve aşağıdaki yetkilerde token oluşturuyorum.

Token'ı yapıştırıp Connect butonuna tıklıyorum, fakat Discovery sayfasına gelmiyor. Integration sayfasında Cloudflare ayarını Off olarak görüyorum ve On durumuna alıyorum.

Discovery sayfasına geldiğimde Cloudflare'ımdaki tüm domainler ve bu domainlerin DNS kayıtlarının buraya geldiğini görüyorum. Hatta bu domainlerin Verify bir şekilde hesabıma ekliyor. Artık doğrudan bu targetlara scan başlatabilirim.

Probely API

Probely'nin developerlar için çok geniş bir API yelpazesi bulunmaktadır. plus.probely sayfasından yapabileceğiniz bir çok olayı APIlar aracılığı ile yapmanız mümkündür. Hatta bu APIların nerelere hangi yetkilerle erişebileceğine kadar yetkilendirmeniz de mümkündür.

Welcome to API Docs | Probely Developers
Welcome to the Probely API documentation.

API Keylerinizin bulunduğu sayfaya üç noktadan API Keys yolundan ulaşıyorum. Yeni bir API Key oluşturmak için sağdaki Add API Key butonuna tıklıyorum..
Açılan modulde API Key'in adını, hangi rolde olacağı, Key'in bir takıma mı yoksa target'a yönelik olup olmayacağı ve istersem etiketlemesini buradan yapabiliyorum. Ben test amaçlı bir adet Admin API Key isminde key oluşturuyorum. Rolünü Admin yapıyorum ( Admin / Developer / SecOps seçenekleri mevcuttur ). Scope olarak Takım -> Global'i seçiyorum.
İstersem burada API key için birden fazla rol ekleyebilirim.

Generate Key butonuna tıkladığımda JWT Web Token standartında bir key oluşturuyor. Bu keyi kaybetmeyin, çünkü oluşturmuş olduğunuzun bu keyin yeniden generate edemiyorsunuz. Yenisini oluşturmanız gerekiyor. Mevcuttaki key'i de disable etmeniz gerekiyor.

Oluşturulan Keyler hiçbir şekilde silinmiyor, sadece durumunu pasife çekebiliyorsunuz.

Disable ettiğim API Key'im.

Buradan edindiğim token bilgisi ile Postman'de bir deneme yapacağım. Örnek olarak https://api.probely.com/domains/ ile Probely accountumda bulunan domainlerin listesini alacağım. 2 tane Header istiyor benden, biri Accept diğeri ise Authorization için JWT tokenı.

Postman'de ilgili headerlarımı girip GET gönderdiğimde bana domainlerimin olduğu bir veriyi dönüyor.

Scanning Agents

Probely Agent sayesinde dışarıdan erişime kapalı, intranetinizde olan bir web uygulamanıza zafiyet taraması yapmanız mümkün. Bu zafiyet taramasını kuracağınız agent yapmaz, agent burada bir tünelleme yapar. Bu tünellemeye Probely, Farcaster Tunnel diyor ve UDP 443 ile veri alışverişi yapılıyor.

Bu agent için minimum sistem gereksinimleri 1 CPU, 512 MB Ram, 1 GB Storage olarak belirtilmiş.

Bu Docker container'ın kullandığı trafik bilgisi aşağıdaki görseldedir.
Tunnel için Agent, 54.247.135.113 ve 44.212.186.140 IP adreslerine 1024-65535 arası bir porttan çıkıp 443 portu üzerinden UDP protokolü ile tünelleme yapmaktadır.
Burada source port aralığının 1024-65535 arasında olmasının sebebi, agent'in rastgele bir ephemeral port seçerek her yeni bağlantı için eşsiz bir kaynak port kullanmasıdır. Bu, agent'in aynı anda birden fazla bağlantıyı yönetebilmesini sağlar. Örneğin, intranette birden fazla web uygulamasını taramak istediğinizde, agent her bağlantıyı farklı source port'lar üzerinden gerçekleştirir, böylece agent gelen yanıtları doğru bir şekilde eşleştirip yönetebilir.

How to scan internal applications with a Scanning Agent? | Probely Help Center
Scan your internal applications with Probely’s Scanning Agent. A secure, clean, and easy-to-set-up solution to scan non-public applications.
GitHub - Probely/farcaster-onprem-agent: Probely Agent for On-Premises Scans
Probely Agent for On-Premises Scans. Contribute to Probely/farcaster-onprem-agent development by creating an account on GitHub.

Agent Kurulumu

Scanning Agent sayfasında Add Agent butonuna tıklayarak agent'ıma bir isim veriyorum. Eğer bu agent'ın belli bir takımın targetlarını taramasını istersem "Restrict scanning agent's scope to selected teams" tikini seçmem yeterli. Fakat burada ben böyle bir işlem yapmayacağım.

Generate butonuna tıkladığımda bana Agent'ım için bir adet Token veriyor ve Docker'da kurabilmem için komutunu veriyor.

Docker komutumu alıp docker kurulu olan sunucuma giriyorum. Bu aşamada kafanızda nasıl docker kurarım, ayağa kaldırırım gibi bir düşünce varsa hepsi tamamen 2 dakika sürmektedir.

sudo apt install docker.io
sudo docker run -d --name probely-agent --cap-add NE............
0:00
/2:19
docker update --restart unless-stopped probely-agent

Azure DevOps CI / CD Pipeline'ına Dahil Etme (Shift Left)

Probely'nin asıl olayı yazılım geliştirme sürecine dahil edilebilmesi. Bunu da aslında API desteği ile çok kolay bir şekilde yapabiliyoruz. Hatta preprod bir ortam ise probely agent ile ulaşabiliyoruz.
Yazımın bu içeriği Azure DevOps'da CI / CD Pipeline Kullanımı başlıklı içeriğin devamı diyebilirim.

görsel kaynağı: https://probely.com/blog/integrating-web-vulnerability-scanners-in-continuous-integration-dast-for-ci-cd/

Öncelikle Probely API için bir adet JWT Token oluşturacağım.

Bir DAST ürünü deploy işleminden sonra başlatılması uygundur, bu da Continuous Deployment (CD - Sürekli Dağıtım) sürecinde yer alır.
Buradaki örneğimde Release pipeline'ımda eklemiş olduğum bir powershell task'ı var. Bu task on-prem olarak kurduğum agent'da çalışıyor.

Authorization için oluşturduğum JWT token bilgimi burada değişken olarak tanımladım ve Azure DevOps'da Variables sekmesine secret olarak ekledim. Bu sayede azure devops ortamında benim oluşturduğum pipeline'ı görenler olsa bile token bilgimi göremiyorlar.

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json")
$headers.Add("Authorization", "JWT $(probely.token)")

$body = @{
    "ignore_blackout_period" = $true
    "scan_profile" = "normal"
} | ConvertTo-Json

try {
    $response = Invoke-RestMethod -Uri 'https://api.probely.com/targets/3zddDuyHLLke/scan_now/' -Method 'POST' -Headers $headers -Body $body
    $response | ConvertTo-Json
}
catch {
    if ($_.Exception.Response.StatusCode.Value__ -eq 400) {
            Write-Host "Bir tarama zaten devam ediyor. İptal isteği gönderiliyor..."
            
            $cancelResponse = Invoke-RestMethod -Uri 'https://api.probely.com/targets/3zddDuyHLLke/scan/cancel/' -Method 'POST' -Headers $headers
            
            Write-Host "Tarama iptal edildi. 1 saniye bekleniyor..."
            Start-Sleep -Seconds 1
            
            $response = Invoke-RestMethod -Uri 'https://api.probely.com/targets/3zddDuyHLLke/scan_now/' -Method 'POST' -Headers $headers -Body $body
            $response | ConvertTo-Json
        
    }
}

Powershell'i okuduğunuzda api.probely.com linkine post gönderiyor, api'da sana 200 dönüyor. Fakat release pipeline'ı tarama bitmeden tekrar tetiklenirse bu sefer 400 dönüyor ve pipeline hataya düşüyor.

Powershell scripti bunu try catch ile yakalayıp önce cancel gönderiyor, akabinde 1 saniye bekleyip tekrardan scan_now gönderiyor.

Bu script içerisindeki 3zddDuyHLLke benim target'ımın probely'deki ID'si. Bu ID bilgisini targets API'ı ile de erişebilirsiniz fakat en kolay yöntem probely URL'inden almak olacaktır. :)
Targets sayfasından target'a tıkladığımda URL bilgisinden ulaşabilirsiniz.

Bu yöntemle CI / CD Pipeline sürecinize Probely yazılımını dahil edebilirsiniz.

Örnek bir Azure DevOps CI / CD Pipeline Örneği

Denemelerimi gerçeğe yakın bir senaryoda yapmak istedim. Ben Azure DevOps'da Developer ve Prod olarak iki adet branch oluşturdum. Developer ortamına bir push geldiği zaman CI pipeline'ım bu dosyaları build ediyor ve bir artifact çıkartıyor. Artifact oluşturulduktan sonra CD pipeline'ım çalışıyor. CD pipeline'ımda DEV stage'ime artifact içerisindeki dosyaları; DEVELOPER ortamına deploy ediyor. Deploy işlemi bitince taskların en sonunda Powershell Probely taskım çalışıyor ve probely belirlemiş olduğum DEVELOPER ortamı targetı için scan işlemini otomatik başlatıyor.

Scan işleminin sonucuna göre sonraki Stage için onay veriyorum ve artifact içerisindeki dosyalar bu sefer PROD ortama deploy ediliyor. Yine deploy işleminin sonunda powershell probely taskım çalışıyor fakat bu sefer PROD ortamı target'ım için çalışıyor.

DEVELOPER ortamıma dışarıdan kullanıcılar bağlanamıyor, sadece benim networkümde olan kişiler bağlanabiliyor. Bu sebeple içerde bir probely agent'ını çalıştırdığım docker container sunucum var.
Buradaki senaryoyu daha iyi anlatabilmek için bir diyagram hazırladım.

Bu senaryoda; otomatik tetiklemede DEVELOPER ortamı için probely'de full tarama başlatıp PROD ortam için lightning bir tarama başlatabilirsiniz.
PROD ortamı için web uygulamanın kullanılmadığı saatlerde Scheduled Scan ayarlayabilirsiniz(gece 2-3 gibi) ve bu tarama istediğiniz profilde olur.

Shift Left? Shift Right?

Probely bir zafiyet tarama yazılımıdır ve DAST olarak kendini tanıtır. DAST araçları yazılım geliştirme sürecinde konumlandırılır ve Shift Left stratejisinde yer alır. Fakat probely yazılımını PROD ortam için kullandığımızda, Shift Right stratejisine geçeriz. Burada Probely hala bir DAST aracımıdır? Evet, DAST ürünleri Shift Right stratejileri için de kullanılabilir.

yekta.web.tr


Takip Et