무료 보안 감사 API: 코드를 30초에 스캔
오늘날 보안 스캔의 문제점
정적 분석 도구는 강력하지만 무겁습니다. CI 파이프라인에 Semgrep, CodeQL, Snyk 등을 설정하려면 몇 시간이 걸릴 수 있습니다. 코드 조각을 빠르게 확인하고 싶다면 더 가벼운 것이 필요합니다—코드를 받아 결과를 반환하는 CLI 설치나 대용량 Docker 이미지가 필요 없는 API가 바로 그것입니다.
SecureScope: API 기반 보안 감사
SecureScope는 보안 취약점을 찾기 위해 소스 코드를 스캔하는 REST API입니다. 코드를 전송하면 결과를 받아볼 수 있습니다. 각 결과 항목에는 심각도, 설명, 해당 라인, 그리고 해결 단계가 포함됩니다.
API 키 받기
무료 티어는 월 10회 스캔을 제공합니다. 신용카드가 필요 없습니다.
curl -X POST https://api.aaido.dev/signup \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'
Response
{
"api_key": "ak_abc123...",
"tier": "free",
"monthly_limit": 100
}
키를 저장하세요; 다시 표시되지 않습니다.
첫 번째 스캔
명백한 취약점이 포함된 파이썬 코드 조각입니다:
import pickle
data = pickle.loads(user_input)
스캔하기
curl -X POST https://api.aaido.dev/v1/products/securescope/scan \
-H "X-API-Key: ak_your_key" \
-H "Content-Type: application/json" \
-d '{
"code": "import pickle\ndata = pickle.loads(user_input)",
"language": "python"
}'
응답
{
"findings": [
{
"severity": "HIGH",
"rule": "unsafe-deserialization",
"line": 2,
"message": "pickle.loads with untrusted input enables arbitrary code execution",
"remediation": "Use json.loads() or validate input before deserialization"
}
],
"scan_id": "sc_a1b2c3",
"risk_score": 8.5
}
각 발견 항목은 무엇이 잘못됐는지, 어디서 발생했는지, 그리고 어떻게 수정해야 하는지를 정확히 알려줍니다.
보다 현실적인 예시
다중 이슈가 있는 Flask 라우트를 스캔합니다:
from flask import Flask, request
import subprocess
import sqlite3
app = Flask(__name__)
@app.route('/search')
def search():
query = request.args.get('q')
conn = sqlite3.connect('app.db')
results = conn.execute(f"SELECT * FROM items WHERE name LIKE '%{query}%'")
return str(results.fetchall())
@app.route('/run')
def run_cmd():
cmd = request.args.get('cmd')
output = subprocess.check_output(cmd, shell=True)
return output
스캔 결과는 다음과 같습니다:
- SQL Injection (HIGH) – 11번째 줄의 f‑string을 사용한 SQL 쿼리
- Command Injection (CRITICAL) – 16번째 줄의 쉘 명령에 사용자 입력이 그대로 사용됨
- No CSRF Protection (MEDIUM) – CSRF 토큰이 없는 Flask 앱
해결 방안: 파라미터화된 쿼리를 사용하고, subprocess.check_output을 subprocess.run과 화이트리스트로 교체하며, CSRF 방지를 위해 flask-wtf를 추가하세요.
CI/CD에 통합하기
간단한 GitHub Actions 단계 예시:
- name: Security scan
run: |
RESULT=$(curl -s -X POST https://api.aaido.dev/v1/products/securescope/scan \
-H "X-API-Key: ${{ secrets.SECURESCOPE_KEY }}" \
-H "Content-Type: application/json" \
-d "{\"code\": \"$(cat src/main.py | jq -Rs .)\", \"language\": \"python\"}")
HIGH_COUNT=$(echo $RESULT | jq '[.findings[] | select(.severity == "HIGH" or .severity == "CRITICAL")] | length')
if [ "$HIGH_COUNT" -gt "0" ]; then
echo "Found $HIGH_COUNT high/critical vulnerabilities"
echo $RESULT | jq '.findings[] | select(.severity == "HIGH" or .severity == "CRITICAL")'
exit 1
fi
이렇게 하면 고위험 발견 항목이 있는 PR을 차단합니다. 무료 티어는 월 10회 스캔으로 대부분의 소규모 팀에 충분합니다.
지원 언어
Python, JavaScript, TypeScript, Go, Rust, Java, Solidity, Ruby, PHP. 스캐너는 패턴 매칭과 AI 분석을 결합해 알려진 취약점 패턴과 상황에 맞는 이슈를 모두 탐지합니다.
CLI 도구 대신 API를 선택하는 이유는?
- 설치 불필요 –
curl만 있으면 어떤 환경에서도 작동 - 항상 최신 – 새로운 규칙이 서버 측에서 배포되어 클라이언트 업데이트가 필요 없음
- 조합 가능 – 출력 결과를 Slack, Jira 또는 자체 대시보드로 파이프라인 연결
API는 복잡한 터미널 출력이 아닌 구조화된 JSON을 반환합니다. 이를 파싱하고 필터링해 필요한 곳으로 전달하세요.
가격
- 무료 티어: 월 10회 스캔 (일상적인 사용에 충분)
- Pro: 월 $49, 50회 스캔, 심층 분석 포함
- Enterprise: 월 $199, 다중 모델 합의 스캔 추가
Product page: