PlainSight: 소규모 비즈니스를 위한 로컬 우선 보안 점검 도구
요약
PlainSight는 소규모 비즈니스를 위한 로컬 우선 보안 점검 CLI 도구입니다. 클라우드 API 없이 오직 로컬 오픈 웨이트 모델을 사용하여 웹사이트의 취약점을 분석하고, 일반인이 이해하기 쉬운 영어 보고서를 생성합니다. 이는 IT 부서가 없는 소상공인을 대상으로 하는 '사이드 허슬' 비즈니스 모델을 제시합니다.
핵심 포인트
- 소규모 비즈니스를 위한 저비용 보안 점검 도구입니다.
- 클라우드 API 없이 로컬 오픈 웨이트 모델만 사용합니다.
- TLS, 보안 헤더, SPF/DMARC 등 실질적인 취약점을 점검합니다.
- 보고서는 일반인이 이해하기 쉬운 언어로 구조화됩니다.
이것은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle에 제출하는 내용입니다.
제가 구축한 것 (What I Built)
PlainSight는 소규모 비즈니스의 웹사이트에 대한 수동 보안 점검(passive security checkup)을 수행하고, 오직 로컬 오픈 웨이트 모델이 작성한 순수 영어 보고서를 생성하는 명령줄 도구입니다. 클라우드 API를 사용하지 않습니다. 고객 데이터가 외부로 유출되지 않습니다.
bun plainsight.ts checkup example-business.com
누가 돈을 지불할까요? CPA(공인회계사), 법무법인, 치과 의원, 계약업자, 부동산 중개업소 등 하루 종일 민감한 고객 데이터를 다루지만 IT 부서가 없는 소규모 비즈니스입니다. 그들은 침투 테스트($5k 이상)를 감당할 수 없지만, $49~$129에 "웹사이트의 문제점과 영어로 설명해 드립니다"라는 한 페이지짜리 보고서는 감당할 수 있습니다. 이것이 바로 부업(side hustle) 모델입니다: 도구를 실행하고, 보고서를 전달하며, 분기별 재검사를 제공하는 것입니다.
이 도구는 해당 규모에서 실제로 중요한 사항들을 점검합니다:
- TLS 인증서 상태 및 만료일
- 보안 헤더(CSP, HSTS, X-Frame-Options 등)
- 이메일 스푸핑 방지 기능(SPF/DMARC) — 소규모 비즈니스가 가장 많이 사칭당하는 방식입니다.
- 실수로 노출된 파일 (
.git,.env, 설정 백업본) - HTTP→HTTPS 리디렉션, 혼합 콘텐츠(mixed content), 쿠키 플래그
- 연구자들이 책임감 있게 문제를 보고할 수 있도록 security.txt 파일 존재 여부
모든 점검은 수동적입니다. 즉, 모든 브라우저가 수행하는 것과 동일한 요청을 보냅니다. README에는 명시적인 윤리 섹션이 있습니다: 소유하거나 테스트할 서면 승인을 받은 사이트만 스캔해야 합니다.
스캔은 구조화된 발견 사항(structured findings)을 생성하며, 여기서 흥미로운 부분이 발생합니다: 로컬 모델이 보고서를 작성한다는 것입니다. 템플릿이 아닙니다—실제로 읽기 쉬운 문서이며, "가장 먼저 수정할 것," "곧 수정할 가치가 있는 것," 그리고 "알아두면 좋은 것" 순서로 정리되어 치과 사무실 관리자가 이해할 수 있는 언어로 제공됩니다.
데모 (Demo)
저의 다른 프로젝트 데모 사이트를 대상으로 실제 실행한 결과입니다 (자세한 내용은 아래에서 다룹니다).

The 실행 결과로 얻을 수 있는 전체 아티팩트:
코드
[
GitHub logo] blueeyez425-art / plainsight
소규모 비즈니스를 위한 로컬 우선 보안 점검 도구 — 수동 스캔 + 로컬 오픈 웨이트 AI가 일반적인 보고서를 작성합니다. 고객 데이터는 절대 기기를 벗어나지 않습니다.
PlainSight
소규모 비즈니스 웹사이트를 위한 로컬 우선 보안 점검. 수동으로 확인하고, 일반 언어의 보고서로 출력 — 전적으로 사용자의 기기에서 실행되는 오픈 웨이트 모델이 작성합니다.
기능 (What it does)
bun plainsight.ts checkup example.com
- 도메인을 수동으로 스캔합니다. — 방문자 브라우저가 수행하는 것과 동일한 요청을 처리합니다: TLS 인증서, HTTP 보안 헤더, HTTP→HTTPS 리디렉션, 혼합 콘텐츠(mixed content), 쿠키 플래그, 이메일 인증(SPF/DMARC), 그리고 흔히 노출되는 민감 파일 몇 가지(
.git,.env, 설정 백업). - 원시 발견 사항을 로컬 오픈 웨이트 모델에 전달합니다 (Ollama를 통해) 이 모델은 사업주가 실제로 읽을 수 있는 차분하고 전문 용어 없는 보고서를 작성합니다: 각 문제가 무엇인지, 왜 _그들의 비즈니스_에 중요한지, 그리고 구체적인 해결 방법 하나.
- Markdown 형식의 보고서를 저장하여 그대로 보내거나
pandoc으로 PDF로 렌더링할 수 있습니다.
로컬 AI가 여기서 중요한 이유 (Why local AI matters here)
보안 보고서는 고객의 약점을 보여주는 지도와 같습니다. 이를 폐쇄적인 제3자 API를 통해 전송하는 것은...
GitHub에서 보기: View on GitHub
전체 코드는 TypeScript 파일 하나(~250줄)로 작성되었으며, Bun 환경에서 실행되고 npm 종속성은 전혀 없습니다. 의도적으로 지루합니다: 스캐너는 결정론적(deterministic) 코드이며, 모델은 오직 글쓰기만 합니다.
구축 과정 (How I Built It)
각자 잘하는 것을 하는 두 부분으로 나뉩니다:
스캐너는 AI가 아닌 코드입니다. 모든 검사는 일반 TypeScript로 이루어집니다: 페이지를 가져오고, 헤더와 TLS를 검사하며, 알려진 민감 경로 목록을 탐색(probe)하고, SPF/DMARC를 위해 DNS TXT 레코드를 조회합니다. 결정론적이며 감사 가능(auditable)하고, 발견된 내용에 환각(hallucination) 위험이 없습니다. 취약점을 지어내는 보안 도구는 쓸모없는 것보다 더 나쁩니다.
보고서 작성기는 Ollama를 통한 오픈 가중치 모델입니다. 스캐너는 구조화된 발견 내용 JSON과, 평이한 영어(plain English), 차분한 어조(calm tone), 그리고 과장된 경고가 없음을 요구하는 프롬프트를 모델에 전달합니다. 기본 모델은 llama3.1:8b이며, 저는 gemma3에서도 실행해 보았습니다. 어떤 Ollama 모델이든 하나의 환경 변수만으로 작동합니다:
OLLAMA_MODEL=gemma3:1b bun plainsight.ts checkup example.com
모델은 발견 목록 외에는 아무것도 볼 수 없습니다—쿠키도, 페이지 본문도,
2. 한계 비용이 0이므로 가격 책정이 효과적입니다. 보고서당 $49~$129를 지불하는 API 사용은 생존 가능하지만 성가시고, 잘못된 방식으로 확장됩니다. 로컬 모델을 사용하면 백 번째 보고서의 비용이 첫 번째 보고서와 정확히 같습니다. 즉, 0원입니다. 이는 비즈니스가 될 수 있는 것 자체를 바꿉니다. 무료 '첫 검진' 리드 마그넷, 분기별 재검사, 전체 고객 목록에 대한 일괄 실행 등 모든 것을 계량기를 보지 않고도 할 수 있습니다.
3. 종속성 없음, 구식화 우려 없음. 폐쇄형 제공업체는 가격을 변경하거나, 모델을 사용 중단시키거나, 제 사용 사례가 정책 개정으로 위반된다고 결정할 수 있습니다. 하지만 모델이 내 기기의 파일이라면, 오늘 제가 판매하는 도구도 2년 후에도 작동하며, 환경 변수 하나만 바꾸면 llama3.1을 다음 버전의 gemma3로 교체할 수 있습니다. 오픈 생태계 — Ollama, 자체 개방 가중치(open weights), Bun — 가 공급망이며, 이 중 어느 것도 빼앗길 수 없습니다.
저의 첫 사용자 경험
저 자신이었고, 실제 문제를 포착했습니다.
저는 또 다른 오픈 소스 프로젝트인 SolAudit (솔라나 프로그램용 보안 스캐너, 아무래도 저는 한 종류의 것만 만드는 것 같습니다)를 유지하고 있으며, 데모 사이트는 solaudit-web.vercel.app입니다. PlainSight가 처음으로 수행한 실제 검사는 이 프로젝트에 대한 것이었고, 보고서는 누락된 Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, 그리고 Referrer-Policy 헤더를 지적했습니다 — 심지어 보안 도구의 데모 사이트에서 말입니다. 창피한가요? 약간요. 소규모 비즈니스가 필요로 하는 바로 그 종류의 발견인가요? 전적으로 그렇습니다.
저는 vercel.json에서 해당 헤더들을 수정하고, 재배포했으며, 검진을 다시 실행했습니다:
| Critical | High | Medium | Low | Info | |
|---|---|---|---|---|---|
| 이전 | 0 | 0 | 1 | 3 | 2 |
| 이후 | 0 | 0 | 0 | 0 | 1 |
남아있는 유일한 발견 사항은
지불했나요? 저는 저 자신에게 $0로 청구서를 발행하고 배움으로 가득 찬 팁 통을 남겼습니다. 하지만 이는 핵심 약속이 유효하다는 것을 입증했습니다. 즉, 이 도구가 실제로 수정 가능한 문제를 찾아내고 사용자가 실제로 행동할 수 있는 언어로 설명해 준다는 것입니다. 첫 번째 외부 사용자가 다음 단계입니다. 보고서 형식은 제가 지역 소규모 비즈니스를 대상으로 시범 운영하는 프리랜서 점검 서비스의 결과물(deliverable)이 될 것입니다.
수상 부문
- Gemma 활용 최우수: Gemma 3는 테스트된 리포트 작성 백엔드입니다 (
OLLAMA_MODEL=gemma3:1b, 샘플 스캔에 대해 엔드투엔드로 검증됨 — Gemma가 발견 사항 JSON으로부터 완전한 평이한 영어 보고서를 작성함). Llama를 기본으로 사용하며, 오픈 웨이트(open weights)로만 구성되었습니다.
챌린지 기간 동안 제작되었습니다 (2026년 10월 14일~15일). 스캐너: TypeScript + Bun, 의존성 없음. 보고서: Ollama를 통한 오픈 웨이트 모델. MIT 라이선스 — 만약 여러분이 자신의 마을에서 이 부업을 운영하고 싶다면, 레포지토리(repo)는 여러분의 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기