Güvenlik

USOM Zararlı Listesi API’sinin Checkpoint IOC İle Entegrasyonu

Bu çalışmada, Ubuntu sunucu üzerinde yürütülen işlemler aracılığıyla USOM Zararlı Bağlantılar Listesi API’si ile Checkpoint IOC’nin entegrasyonu gerçekleştirilmiştir. Bu entegrasyon sayesinde, USOM tarafından sağlanan zararlı bağlantı verileri otomatik olarak Checkpoint IOC’ye aktarılarak ağ güvenliği önlemleri güçlendirilmiştir. Bu entegrasyon, kuruluşların ağlarını daha etkin bir şekilde korumalarına ve zararlı bağlantılardan kaynaklanabilecek tehditleri azaltmalarına olanak tanımaktadır.

1. Dış Kaynaklı Beslemeler Nedir?

Güvenlik duvarları, ağ trafiğini izlemek ve yönetmek için kullanılan temel bileşenlerdir. Dış kaynaklı beslemeler (external feeds), güvenlik duvarlarının trafiği izlemek ve analiz etmek için kullanabileceği dış veri kaynaklarıdır. Bu kaynaklar genellikle tehdit istihbaratı sağlayan üçüncü taraf hizmetlerden veya topluluklardan gelir.

External Feeds’in güvenlik duvarlarına eklenmesinin birkaç nedeni vardır:

  1. Tehdit İstihbaratı Sağlama: Dış kaynaklı beslemeler, bilinen kötü amaçlı IP adresleri, alan adları, URL’ler veya diğer tehlikeli trafiği tanımlamak için güncel tehdit istihbaratı sağlar. Bu, güvenlik duvarının daha etkili bir şekilde tehditlere karşı korunmasına yardımcı olabilir.
  2. Tehditlerin Algılanması ve Engellenmesi: External feeds, güvenlik duvarının ağ trafiğini izleyerek ve dış kaynaklı istihbaratı analiz ederek, potansiyel tehditleri hızlı bir şekilde algılamasına ve engellemesine olanak tanır. Bu, saldırıların etkilerini azaltabilir veya önleyebilir.
  3. Güncel Kalma: Tehditler sürekli olarak evrimleşirken, dış kaynaklı beslemeler güvenlik duvarlarının güncel kalmasını sağlar. Bu, savunmanın sürekli olarak tehditlere karşı güncellenmesini sağlar.
  4. Kapsamlı Koruma Sağlama: Dış kaynaklı beslemeler, güvenlik duvarının yerel tehdit istihbaratını tamamlar ve çeşitli tehdit türlerini kapsayan daha kapsamlı bir koruma sağlar.

Ancak, dış kaynaklı beslemelerin kullanımı bazı zorlukları da beraberinde getirebilir. Yanlış pozitifler, performans etkileri ve güvenilirlik sorunları gibi konular, dış kaynaklı beslemelerin doğru bir şekilde yapılandırılması ve yönetilmesi gereken önemli konulardır. Bununla birlikte, iyi yapılandırılmış ve güvenilir dış kaynaklı beslemeler, güvenlik duvarlarının etkinliğini artırabilir ve ağları daha güvenli hale getirebilir.

2. USOM

USOM, Türkiye’deki dijital tehditleri izlemek, analiz etmek ve önlemek için kurulan önemli bir kuruluştur. USOM uhdesinde yürütülen çalışmalar kapsamında zararlı olduğu tespit edilen internet adresleri usom.gov.tr adresinden farklı formatlarda yayınlanmaktadır.

USOM tarafından sağlanan dış kaynaklı beslemeler, özellikle Türkçe sitelerle sağlanan potansiyel tehditleri izlemek ve tanımlamak için kullanılır. Bu beslemeler, kötü amaçlı IP adresleri, alan adları, URL’ler ve diğer tehlikeli dijital kaynaklar hakkında güncel tehdit istihbaratı sağlar.

USOM’un Zararlı Bağlantılar Listesi, Türkçe sitelerle yapılabilecek dijital tehditlere karşı kullanıcıları korumada hızlı ve etkili bir şekilde müdahale etmek için kritik bir rol oynamaktadır. Bu liste, Türkiye’nin siber altyapısını güçlendirmek ve dijital güvenliği sağlamak için önemli bir kaynak olarak değerlendirilmektedir.

3. Uygulama Adımları

3.1 Ubuntu Sunucu

Ubuntu sunucuları kuruluşların çeşitli ihtiyaçlarını karşılamak için güvenilir, esnek ve yaygın olarak kullanılan bir platformdur. Hemen her veri merkezinde bulunur. Bu çalışmada da Apache, Python ve Cron işlemleri için Ubuntu sunucusu kullanılmıştır.

3.1.1 Python Kodu

Ubuntu Sunucu üzerinde Python kodunun çalıştırılması ve Apache ile oluşturulan listelerin paylaşılması sağlanmıştır. USOM API’den elde edilen veriler, belirlenen belirli bir şiddet seviyesine (Severity 7 ve üzeri) göre çekilerek URL, Domain ve IP olarak ayrı ayrı .csv dosyalarına yazılmıştır. Bu işlemler, bir Ubuntu sunucusu üzerinde Python kodu kullanılarak gerçekleştirilmiştir. Crontab ile Python kodunun çalışma sıklığı ayarlanmıştır ve listelerin güncel tutulması sağlanmıştır.

import requests
import csv
import time
import shutil
import os
from datetime import datetime, timedelta

def fetch_and_write_data(api_url, csv_file, log_prefix, criticality_levels):
# Log dosyası için klasör oluşturma
if not os.path.exists(log_folder):
os.makedirs(log_folder)

# Tarih bilgisi
current_date = time.strftime("%Y-%m-%d")

# Log dosyasını oluşturma
log_file = os.path.join(log_folder, f"{current_date}_{log_prefix}.log")

# CSV dosyası path'i
csv_file_path = os.path.join("/home/sukru/usom_url_list/api/", csv_file)

# Dosyayı her çalıştırıldığında sıfırdan oluştur
with open(csv_file_path, mode='w', newline='', encoding='utf-8') as file:
pass

for criticality_level in criticality_levels:
all_data = [] page = 0
page_count = 1 # İlk başta en az bir sayfa olduğunu varsayılır

while page < page_count:
try:
response = requests.get(api_url, params={'criticality_level': criticality_level, 'page': page, 'per-page': 99999})
response.raise_for_status() # İstek başarılı değilse hata dön
data = response.json()
print(f"API URL'si: {response.url}")
with open(log_file, mode='a', encoding='utf-8') as log:
log.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - API URL'si: {response.url}\n")

if page_count == 1:
page_count = data["pageCount"]
all_data.extend(data["models"])
page += 1

# Her döngü adımında CSV dosyasına yazma işlemi gerçekleştir
with open(csv_file_path, mode='a', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
for item in data["models"]:
writer.writerow([item["url"]])

time.sleep(10)

except requests.exceptions.HTTPError as e:
print(f"Hata oluştu: {e}")
with open(log_file, mode='a', encoding='utf-8') as log:
log.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - Hata oluştu: {e}\n")
print("Bir süre bekleyip yeniden deneyeceğiz...")
with open(log_file, mode='a', encoding='utf-8') as log:
log.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - Bir süre bekleyip yeniden deneyeceğiz...\n")
time.sleep(120)

print(f"{csv_file} dosyasına veriler başarıyla yazıldı.")
with open(log_file, mode='a', encoding='utf-8') as log:
log.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {csv_file} dosyasına veriler başarıyla yazıldı.\n")

# Dosyayı /var/www/ altına kopyala
destination_path = f"/var/www/{csv_file}"
shutil.copy(csv_file_path, destination_path)
print(f"{csv_file} dosyası {destination_path} konumuna kopyalandı.")
with open(log_file, mode='a', encoding='utf-8') as log:
log.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {csv_file} dosyası {destination_path} konumuna kopyalandı.\n")

# 7 günden eski log dosyalarını sil
delete_old_log_files()

def delete_old_log_files():
# Şu anki tarih
current_date = datetime.now()

# 7 gün öncesinin tarihi
old_date = current_date - timedelta(days=7)

# Log dosyalarının bulunduğu klasördeki dosyaları kontrol et
for filename in os.listdir(log_folder):
if filename.endswith(".log"):
# Dosyanın adını parçala ve tarihi al
file_date_str = filename.split("_")[0]
# Tarihi datetime nesnesine dönüştür
file_date = datetime.strptime(file_date_str, "%Y-%m-%d")

# Dosyanın 7 günden eski olup olmadığını kontrol et
if file_date < old_date:
# Dosyayı sil
file_path = os.path.join(log_folder, filename)
os.remove(file_path)
print(f"{filename} dosyası 7 günden eski olduğu için silindi.")

def main():
# Domain verileri için işlem
csv_file_domain = "domain.csv"
api_url_domain = "https://www.usom.gov.tr/api/address/index?type=domain"
fetch_and_write_data(api_url_domain, csv_file_domain, "domain", range(7, 11))

# IP verileri için işlem
csv_file_ip = "ip.csv"
api_url_ip = "https://www.usom.gov.tr/api/address/index?type=ip"
fetch_and_write_data(api_url_ip, csv_file_ip, "ip", range(7, 11))

# URL verileri için işlem
csv_file_url = "url.csv"
api_url_url = "https://www.usom.gov.tr/api/address/index?type=url"
fetch_and_write_data(api_url_url, csv_file_url, "url", range(7, 11))

if __name__ == "__main__":
main()

Kod çalıştırıldıktan sonra log dosyalarına ve ekrana ilgili geri dönüşler gelmiştir.

3.2 CheckPoint External Feed

Checkpoint External Feed tanımlamaları, Smart Console aracılığıyla yapılabilmektedir. Bu makalede, dış kaynaklı beslemelerin oluşturulması için .csv dosyalarının kullanılması ele alınmıştır.

Bu yöntem, güvenlik duvarlarının güncel tehdit bilgileriyle beslenmesini sağlayarak, kurumların dijital varlıklarını daha etkin bir şekilde korumasına olanak tanır. Ayrıca, otomatikleştirilmiş besleme işlemi sayesinde tehdit istihbaratı güncel kalır ve güvenlik önlemleri sürekli olarak güçlendirilir. Bu da siber saldırılara karşı daha etkili bir savunma sağlar ve kurumların siber güvenlik stratejilerini güçlendirir.

 3.2.1 CheckPoint Smart Console Konfigürasyonu

Python kodu çalıştırılıp veriler USOM’dan başarılı şekilde çekildikten sonra aşağıdaki görselde görüldüğü üzere, http üzerinden ilgili listelerin erişimi kontrol edilmiştir.

Bu kontrol sonucunda Checkpoint tarafındaki işlemler yapılmıştır. Checkpoint External Feeds Indicators tanılmalarına, Security Policies/Threat Prevention seçildikten sonra Custom Policy Tools altında Indicators tıklanarak ulaşılabilmektedir. Aşağıdaki şekilde örnek pencere gösterilmiştir.

Tanımlamalar yapıldıktan sonra Policy Install edilerek beslemenin yapılıp yapılamadığı loglardan takip edilmiştir. Başarı bir işlemde aşağıdaki gibi pencere görülmelidir.

6. Testler

Yapılan çalışma neticesinde zararlı listesinden alınan birkaç URL’e erişim denenmiş ve Block işlemin gerçekleştiği izlenmiştir.

Çift yönlü olacak şekilde bu korumanın çalıştığı aşağıdaki görselde gösterilmiştir.

7. Sonuç ve Tartışma

https://www.usom.gov.tr/api/ üzerinden deneme imkânı sağlanmaktadır. Geliştirme için ya da kurumun ihtiyaçlarına göre özelleştirmeler yapılabilmesi için denemeler ilgili web site üzerinden sağlanabilmektedir. USOM zararlı listesi 280 bin satırı geçmiş durumdadır. Gaia R81.10 da satır sayısı kısıtlaması olduğundan dolayı tüm listenin çekilebilmesi mümkün olmamıştır. Satır sayısını azaltabilmek için Severity seviyesi 7 ve üzeri olan kaynaklar çekilmiştir. Buna rağmen bazı sitelerde False Positive durumlar ile karşılaşılmıştır. USOM tarafında ilan edilen sitelerin bir kısmının hali hazırda erişilemez olduğu görülmüştür. Eğer geri dönük kontrol yapılmıyorsa yapılarak listenin taze ve güncel tutulması ihtiyacının olduğu anlaşılmıştır.

Python kodu ihtiyaca doğrultusunda daha da geliştirilebilir. Hata durumunda e-posta göndermesi, log dosyalarının geriye yönelik silinmesi gibi gibi.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu