Docker Security with Trivy Tool

Koray Ağaya
Devops Türkiye☁️ 🐧 🐳 ☸️
4 min readAug 8, 2019

--

Yeni teknolojiler çıktıkça bunları kullanmakta tereddüt bile etmiyoruz. Docker da bunlardan bir tanesi sağladığı yararlar çok ama çok fazla ! Peki kullandığınız docker işletim sistemlerinin barındırdığı güvenlik açıklarından haberiniz var mı ?

Github üzerinde bulunan Trivy aracıda tam bu işe yarıyor.

Ne mi yapıyor ? Kullanacağınız docker işletim sistemi üzerinde bir tarama işlemi gerçekleştirerek güvenlik açıklarını size bir bir söylüyor. Yüklemesi ve kullanması çok basit.

Her çeşit işletim sisteminide destekliyor. Windows da buna dahil Aşağıdaki adreste kendi işletim sisteminize uygun olan versiyonu indirip kullanabilirsiniz.

Trivy aracinin en sevdiğim özelliği komut satında çalışması ve size json formatında bir çıktı verebilmesi.

Çalıştırabileceğiniz komutları aşağıda bulabilirsiniz.

JSON Formatında Kaydetme

trivy -f json -o results.json <Docker-Image-Ismi>trivy -f json -o docker-ubuntu.json ubuntu

Açıklığın Kritiklik Derecesine Göre Filtreleme Yapma

trivy --severity HIGH,CRITICAL ubuntu

Açıklığı Kütüphane yada İşletim Sistemine Göre Filtreleme

trivy --vuln-type os ruby:2.3.0trivy --vuln-type library ubuntu

Trivy aracinin json formatında bize çıktı vermesini çok iyi düşünmüşler. İçine baktığımızda iç içe geçmiş bir yapıdan oluştuğunu görmekteyiz!

Bu yazımda Json dosyasını ayıklamak ve okuyacağımız formata getirmek için size yardımcı olmak istedim. Bunun içinde python kütüphanelerinden faydalanacağım. Web üzerinde Python komutlarını interaktif olarak çalıştırmak için github üzerindeki JupyterLab aracını kullanacağım. Şiddetle tavsiye ederim.

Yüklenmesi

--------- Python3 ---------------python3 -m pip install --upgrade pip
python3 -m pip install jupyter
--------- Python2 ---------------python -m pip install --upgrade pip
python -m pip install jupyter

Çalıştırılması

jupyter notebook

Yukarıdaki komutu çalıştırdıktan sonra aşağıdaki gibi bir ekran gelmektedir.

Bu ekran üzerinden New butonuna basılarak Python 3 seçilir.

Çalışacağımız ve komut yazacağımız ekran aşağıdaki gibidir. Python komutlarımızı In [ ] adlı yeşil kutucuğa yazıp RUN ederek çalıştıracağız.

Python3 üzerinde lazım olan kütüphaneler aşağıdaki gibidir. Bu kütüphaneleri JupyterLab üzerinde çalıştırıp yükleyeceğiz.

  1. PANDAS
pip install pandas

Pandas aracı elimizdeki dataları analiz etmek için mükemmel bir araçtır.

2. JSON

pip install json

Yukarıda kütüphaneler şimdilik yeter gibi duruyor. Aşağıdaki komutu kullanarak json dosyasını yukarıda elde etmiştik

trivy -f json -o docker-ubuntu.json ubuntu

Elde edilen dosya içeriği aşağıdaki gibi gözükmektedir.

JupyterLab aracımızı kullanalım. JSON formatındaki dosyamızı HTML’e dönüştürelim.

A. JSON to HTML

import json
import pandas as pd
from pandas.io.json import json_normalize
with open('/Users/XXXXX/docker-ubuntu.json') as json_file:
dict_lst = json.load(json_file)
comment = json_normalize(dict_lst, 'Vulnerabilities', record_prefix='Prefix.')
print(comment.to_html(r'/Users/XXXXX/docker-ubuntu.html', classes="table table-striped")

Çok güzel yukardaki yazdığımız kodumuz çalışıyor HTML çıktı veriyor. O zaman bunu html olarak kayıt edelim.

import json
import pandas as pd
from pandas.io.json import json_normalize
with open('/Users/XXXXX/docker-ubuntu.json') as json_file:
dict_lst = json.load(json_file)
comment = json_normalize(dict_lst, 'Vulnerabilities', record_prefix='Prefix.')
print(comment.to_html(r'/Users/XXXXXX/docker-ubuntu.html', classes="table table-striped"))

Kaydedilen docker-ubuntu.html dosyasının içeriği aşağıdaki gibidir. Ne güzel duruyor değil mi kurban olduğum :) Yukarıdaki None yazmasına bakmayın dosyası verdiğiniz dizine kayıt etti bile !

A. JSON to CSV

Tekrardan JupyterLab aracına geçelim. Aşağıdaki python kodlarını çalıştıralım.

import json
import pandas as pd
from pandas.io.json import json_normalize


with open('/Users/XXXXX/docker-ubuntu.json') as json_file:
dict_lst = json.load(json_file)
comment = json_normalize(dict_lst, 'Vulnerabilities', record_prefix='Prefix.')
print(comment.to_csv (r'/Users/XXXXXX/docker-ubuntu.csv', index = None, header=True))

Bu yazımada burada son veriyorum. Umarım yararlı bir yazı olmuştur.

Profilime tıklayarak diğer yazılarıma göz atabilirsiniz.

Kişisel Bloğuma göz atmak isterseniz:

--

--