Xây dựng Công cụ Tạo Báo cáo Lỗ hổng Tự động bằng Python

Quy trình phát triển

Công cụ này giúp tự động hóa việc tạo báo cáo lỗ hổng cho các chuyên gia an ninh mạng. Dựa trên cơ sở dữ liệu lỗ hổng lưu trữ trong tệp Excel, công cụ hỗ trợ tìm kiếm, phân trang và xuất báo cáo định dạng DOCX.

Cấu trúc thư mục

report_generator/
├── main.py
├── requirements.txt
└── config/
    ├── vul_db.xlsx
    ├── template.docx
    └── output/

Thiết kế logic

Quy trình bao gồm 4 bước chính:

  1. Tìm kiếm lỗ hổng theo tên (phân tích văn bản)
  2. Hiển thị kết quả với phân trang
  3. Tạo báo cáo từ mẫu DOCX
  4. Xuất file với tên tự động tăng

Thực thi code

import argparse
import pandas as pd
from docx import Document
import os

def load_vulnerability_data():
    return pd.read_excel('config/vul_db.xlsx')

def generate_report(vul_data, output_dir):
    template = Document('config/template.docx')
    output_file = os.path.join(output_dir, f'report_{len(os.listdir(output_dir)):03}.docx')
    
    for _, row in vul_data.iterrows():
        for para in template.paragraphs:
            if '{{vul_name}}' in para.text:
                para.text = para.text.replace('{{vul_name}}', row['vulnerability_name'])
            if '{{risk_level}}' in para.text:
                para.text = para.text.replace('{{risk_level}}', row['risk_level'])
            # Xử lý các trường còn lại tương tự
    
    template.save(output_file)
    print(f'Đã xuất báo cáo đến: {output_file}')

def main():
    parser = argparse.ArgumentParser(description='Công cụ tạo báo cáo lỗ hổng tự động')
    parser.add_argument('-q', '--query', help='Từ khóa tìm kiếm lỗ hổng')
    parser.add_argument('-p', '--page', type=int, default=1, help='Số trang')
    parser.add_argument('-s', '--size', type=int, default=5, help='Số bản ghi/trang')
    parser.add_argument('-g', '--generate', action='store_true', help='Tạo báo cáo')
    
    args = parser.parse_args()
    vul_data = load_vulnerability_data()
    
    if args.query:
        filtered = vul_data[vul_data['vulnerability_name'].str.contains(args.query, case=False, na=False)]
        if not filtered.empty:
            start_idx = (args.page - 1) * args.size
            page_data = filtered.iloc[start_idx:start_idx + args.size]
            
            for _, row in page_data.iterrows():
                print(f"Tên: {row['vulnerability_name']} | Mức độ: {row['risk_level']}")
                print(f"Mô tả: {row['description']}\n")
            
            if args.generate:
                os.makedirs('config/output', exist_ok=True)
                generate_report(page_data, 'config/output')
        else:
            print("Không tìm thấy kết quả phù hợp")
    else:
        print("Vui lòng cung cấp từ khóa tìm kiếm với -q")

if __name__ == '__main__':
    main()

Cách sử dụng

  • python main.py -q SQL -p 1 -s 3: Tìm lỗ hổng SQL, hiển thị 3 bản ghi/trang
  • python main.py -q XSS -g: Tạo báo cáo từ kết quả tìm kiếm

Tham số quan trọng

  • -q: Từ khóa tìm kiếm (phân tích văn bản)
  • -p: Số trang (mặc định 1)
  • -s: Số bản ghi/trang (mặc định 5)
  • -g: Xuất báo cáo DOCX

File mẫu DOCX cần chứa các placeholder như {{vul_name}} để thay thế nội dung tự động.

Thẻ: python Pandas DOCX command-line security automation

Đăng vào ngày 30 tháng 7 lúc 11:10