초기에 .NET 취약점 포착하기: Puma Scan 실전 가이드
Source: Dev.to
왜 Puma Scan인가?
공식 OWASP Source Code Analysis Tools list 에는 많은 SAST 도구가 존재하지만, 이번 과제에서는 Sonar, Snyk, Semgrep, Veracode 를 제외했습니다. 남은 C#/.NET 옵션 중 Puma Scan 이 눈에 띈 이유는 다음과 같습니다:
- .NET 및 C# 전용으로 설계되었습니다
- Visual Studio, VS Code, 그리고 명령줄과 통합됩니다
- SQL Injection 과 Cross‑Site Scripting (XSS) 같은 일반적인 OWASP Top 10 이슈를 탐지합니다
- Community Edition 이 무료로 제공되어 학습 및 테스트에 적합합니다
전체 데모(코드, 자동화 스크립트, 스캔 결과)는 GitHub에 공개되어 있습니다.
취약 코드 예시
데모를 간단하고 재현 가능하게 만들기 위해, 고전적인 SQL injection 취약점이 포함된 최소 C# 클래스를 사용합니다:
// TestVuln.cs
using System;
using System.Data.SqlClient;
public class VulnerableClass
{
public void UnsafeQuery(string userInput)
{
// ⚠️ SQL Injection: user input concatenated directly into query
string query = "SELECT * FROM Users WHERE Id = " + userInput;
SqlCommand cmd = new SqlCommand(query);
}
}
공격자가 1 OR 1=1 을 입력하면 쿼리는 다음과 같이 변합니다:
SELECT * FROM Users WHERE Id = 1 OR 1=1
→ 모든 사용자 레코드가 노출됩니다.
이는 CWE‑89 및 OWASP Top 10: A03:2021 – Injection 에 해당합니다.
Puma Scan을 이용한 자동 탐지
Step 1: 프로젝트에 Puma Scan 추가
dotnet add package Puma.Security.Rules
Step 2: PowerShell 스크립트 (scan.ps1)
# scan.ps1 - PumaScan SAST Analysis Script
Write-Host "======================================" -ForegroundColor Cyan
Write-Host " PumaScan - SAST Security Analysis" -ForegroundColor Cyan
Write-Host "======================================" -ForegroundColor Cyan
Write-Host ""
# Build the project with PumaScan analysis
Set-Location PumaScanner
dotnet clean | Out-Null
dotnet build
Write-Host ""
Write-Host "======================================" -ForegroundColor Green
Write-Host " Analysis Complete!" -ForegroundColor Green
Write-Host "======================================" -ForegroundColor Green
Write-Host ""
Write-Host "Look for security warnings above:" -ForegroundColor Yellow
Write-Host " - SEC0107: SQL Injection vulnerability" -ForegroundColor Yellow
Write-Host ""
Set-Location ..
Step 3: 결과 확인
다음 명령으로 스크립트를 실행합니다:
powershell -ExecutionPolicy Bypass -File .\scan.ps1
출력에는 다음과 같은 명확한 경고가 포함됩니다:
SEC0107: SQL Injection vulnerability
이는 Puma Scan이 샘플 코드에서 삽입된 쿼리를 성공적으로 식별했음을 나타냅니다.