Tenable Security Center API Kullanımı ve Örnekleri

Bu yazımda Tenable Security Center üzerinde API kullanımı ve API ile örnek olarak neler yapılabileceğinden bahsedeceğim.

İlk olarak Tenable Security Center nedir kısa bir bahsedelim.

Tenable Security Center Nedir?

Siber tehditlerin karmaşıklaştığı dijital dünyada, kurumların güvenlik operasyonlarını merkezileştiren ve riskleri proaktif şekilde yöneten çözümlere ihtiyaç artıyor. Tenable Security Center da tam bu noktada devreye giren, kapsamlı bir zafiyet yönetimi(vulnerability management) ve risk analiz platformudur.

Temel özellikleri aşağıdaki gibidir;

Merkezi yönetim ve Görselleştirme: Tüm ağ ve sistem taramalarından elde edilen verileri tek bir arayüzde toplar, böylece kullanıcılar mevcut güvenlik durumunu net bir biçimde tek bir arayüz üzerinden izleyebilir.

**Gelişmiş Analiz ve Raporlama: **Tarama sonuçları üzerinde derinlemesine analiz yapmayı olanak sağlar. Kümülatif veriler üzerinde varlıkların kritiklik durumuna ve zafiyetlerin exploit edilebilme durumuna göre önceliklendirilmesi sağlanır.

Sürekli ve Otomatik Tarama: Zaman içinde değişen sistemlerin durumlarını takip etmek için belirli aralıklarla otomatik taramalar oluşturulur. Bu sayede, yeni ortaya çıkan zafiyetlerin tespit edilmesi sağlanır.

**Varlık Keşfi ve Envanter Yönetimi: **Host Discovery taraması ile ağ içindeki tüm cihazları otomatik olarak keşfeder. Bu tarama düzenli olarak yapıldığında mevcut varlıkların güncel envanterini oluşturur.

**Uyumluluk Yönetimi: **PCI, DSS, HIPAA gibi sektör standartlarına uyum taramaları yapılması sağlanır. Düzenli olarak denetim raporları oluşturularak uyumluluk süreçleri desteklenir.


Tenable Security Center API

Tenable Security Center API si birden çok işleminizi otomatize etmenize olanak sağlar. Örnek olarak son 7 gün içerisinde tespit edilmiş kritik bulgu çıkan sunucuların ip listesini otomatik bir asset listesine ekleyebilirsiniz. Bu sayede bu sunuculara özel günlük/haftalık taramalar oluşturabilirsiniz.

Tenable Security Center API referans dökümanına buradan ulaşabilirsiniz

Tenable Security Center API kullanımı için yapmak istediğiniz işlemlere yetkisi olan bir kullanıcının API keyi yeterli olacaktır. Ek olarak Security Center admin hesabı arayüzünden System>Configuration>Security Sekmesi altında bulunan Allow API Keys ayarının açık olması gerekmektedir.

API key oluşturmak için Users sekmesi altından oluşturmak istediğimiz kullanıcının sol tarafında bulunan kutucuğu işaretleyip üst tarafta bulunan menüden API Keys > Generate API Keys butonuna tıklamanız yeterlidir.

Authentication olurken x-apikey header’i oluşturmak yeterli olmaktadır. Örnek bir x-apikey header’i aşağıdaki gibidir.

x-apikey: accesskey=d6c8582dcaa04f4a9899b84f04df4086; secretkey=cc93391e029547acaf9bcd6cfccb4abb

Örnek 1

Bu örnekte Tenable.sc ürününün toplam lisansını ve kaç IP kullandığını API üzerinden öğrenelim.

Lisans bilgileri /rest/system endpointi altında tutulmaktadır. API dökümanını incelediğimizde ilgili endpoint’e GET isteği gönderdiğimizde system ile bilgiler bize JSON çıktısı olarak dönecektir. Postman ile aşağıdaki ekran görüntüsündeki gibi isteğimizi gönderdiğimizde gelen JSON dosyasında birden fazla bilgi geldiğini gördük.

İsteği gönderirken istediğimiz alanlar için filtreleme kullanabiliyoruz. İstek attığımız url’i aşağıdaki şekilde güncellediğimizde sadece istediğimiz alanlar geldi.

/rest/system?fields=activeIPs,licensedIPs


Örnek 2

Bu örnekte Tenable.sc üzerinde oluşan Dynamic Assetleri local ortamımıza indirmemize yarayan API endpointine bakalım. Bilindiği üzere Tenable üzerinde Dynamic olarak assetler oluşturulabiliyor. Ancak bu assetleri csv veya notepad formatında indiremiyoruz.

Tenable.sc Dynamic Assetin özellikleri aşağıdaki gibidir.

3 id li assetin içindeki ipleri almak için aşağıdaki url’i kullanabiliriz. İlgili url’e fields=viewableIPs parametresini eklemez isek, asset hakkında bilgiler vermektedir. Bizim ihtiyacımız olan bu asset içerisindeki ip listeini almak olduğu için parametreyi ekledik.

/rest/asset/3?fields=viewableIPs

Postman isteği ve response’u aşağıdaki gibidir.

Aşağıdaki python scripti bu url’i kullanarak çektiğimiz ipleri ips.txt dosyasına kaydeden scripttir.

import string
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import json


requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 


sc_url="" 
accesskey="" 
secretkey="" 
headers = {
    'x-apikey': 'accesskey='+accesskey+';secretkey='+secretkey,
    'X-ApiKeys': 'true',
    }


def getAssetIP(id):
    response = requests.request("GET", sc_url+'/rest/asset/'+id+'?fields=viewableIPs', headers=headers,verify=False)
    data=response.json()
    data1=data['response']['viewableIPs']
    for key in data1:
        ip=(key['ipList'])
    return ip

   
ips=getAssetIP("3")
file2write=open("ips.txt","w")
file2write.write(ips)
file2write.close()

Çıktısı olan ips.txt dosyasının ekran görüntüsü aşağıdaki gibidir.


Örnek 3

Bu örnekte Tenable.sc üzerinde oluşturduğumuz queryleri API üzerinden çekmeyi göreceğiz.

İlk olarak son 7 gün içinde çıkmış olan Kritik zafiyetleri getiren bir query oluşturalım.

Bu query’e ait olan çıktıları çekmek için aşağıdaki url ‘e istek atmamız gerekmektedir. Burada diğer örneklerden farklı olarak ilgili isteği post olarak göndermemiz gerekiyor ve body kısmına istediğimiz query ‘ e ait bilgileri girmemiz gerekiyor.

/rest/analysis

Body kısmı aşağıdaki gibidir. Query ID’si 12536 olduğu için id kısmına bu değeri girmemiz gerekmektedir.

{
    "type": "vuln",
    "query": {
        "id": 12536
    },
    "sourceType": "cumulative"
}

Postman request ve response’u aşağıdaki ekran görüntüsündeki gibidir.

Query de toolu IP Summary olarak yaptığımızda son 7 gün içerisinde kritik zafiyet çıkan sunucuların ip adresini getirecektir.

Son olarak son 7 gün içerisinde çıkan seviyelerini ve sayısını getiren query aşağıdaki gibidir.


Örnek 4

Son olarak query den çektiğimiz ipler ile assetleri güncelleyen bir otomasyon yapalım.

Assetleri API ile güncellemek için Patch HTTP isteğini kullanmamız gerekiyor ve body kısmında json formatında ilgili ipleri iletmemiz gerekmektedir. Tenable.sc üzerinde boş bir static asset oluşturalım.

Oluşturduğumuz Asset’in id bilgisi 195’dir. Patch metodu ile istek attığımız url aşağıdaki gibidir.

/rest/asset/195

Asseti güncellemek için gönderdiğimiz isteğin içindeki json aşağıdaki gibidir.

{
        "type": "static",
        "definedIPs": "192.168.13.60"
}

Attığımız istek ile asset’in güncellendiğini gördük.

Query üzerinden ipleri çekip asset güncelleyen python scripti aşağıdaki gibidir.

import string
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import json


requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 

sc_url=
accesskey=
secretkey=
asset_id=
query_id=

headers = {
    'x-apikey': 'accesskey='+accesskey+';secretkey='+secretkey,
    'X-ApiKeys': 'true',
    }

def getIP():
    json_data = {
        'type': 'vuln',
        'query': {
            'id': query_id,
        },
        'sourceType': 'cumulative',
    }

    ip_list=''
    response = requests.post(sc_url+'/rest/analysis', headers=headers, json=json_data, verify=False)
    data=response.json()
    data1=data['response']['results']
    for key in data1:
            ip_list+=(key['ip'])+','
        
    ip_list=ip_list[:-1]
    return ip_list
    
def patchIP(ip: string):

    json_data = {
        'type': 'static',
        'definedIPs': ip
    }

    response = requests.patch(sc_url+'/rest/asset/'+ str(asset_id), headers=headers, json=json_data, verify=False)
    print(response)


ip=getIP()
patchIP(ip)

Tenable.sc ürününe ait API ile bir çok işlemi ihtiyaca göre kolay bir biçimde otomatize hale getirebilirsiniz.

Written by

Burak Akdoğan