[SEC-012][실무] 격리된 환경에서 서비스 안전 점검하기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[SEC-012][실무] 격리된 환경에서 서비스 안전 점검하기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 60회 작성일 26-09-06 15:33

본문

[이번 수업]

격리된 실습 폴더에서 서비스 설정을 점검합니다. 범위를 정하고 자동 검사와 사람의 검토를 함께 수행하며 발견·수정·재검증 기록을 남깁니다.

[선수지식]

SEC-001의 위협 모델, SEC-003의 최소 권한, SEC-008의 비밀정보 관리, SEC-009의 공급망 보안, SEC-011의 사고 대응을 알면 좋습니다.

[학습목표]

1. 자산·경계·허용된 점검 범위를 문서화한다.
2. 안전한 설정 규칙을 로컬 코드로 검사한다.
3. 결과의 우선순위를 정하고 수정 뒤 다시 확인한다.

[핵심개념]

보안 점검은 공격을 늘리는 일이 아니라 요구사항을 증거로 확인하는 과정입니다. 서비스 기능, 데이터, 사용자 역할, 외부 연결, 관리자 경로를 적고 인증·인가, 입력 검증, 비밀정보, 로그, 의존성, 백업으로 영역을 나눕니다.

범위에는 대상·제외 대상·허용 시간·도구·중단 조건을 적습니다. 복제된 로컬·격리 환경과 복구용 스냅샷을 쓰며 실제 개인정보와 운영 자격증명은 넣지 않습니다.

자동 검사는 빠르지만 모든 맥락을 알지 못하므로 결과를 확인할 단서로 봅니다. 영향, 악용 가능성, 노출 범위, 수정 난이도로 우선순위를 정하고 수정 뒤 재검증합니다. 통과와 예외에도 날짜와 근거를 남깁니다.

[따라하기]

새 폴더에 service_config.json을 만드세요. 주소와 값은 로컬 연습용입니다.
```json
{
  "environment": "lab",
  "debug": false,
  "admin_bind": "127.0.0.1",
  "allowed_origins": ["http://127.0.0.1:8000"],
  "secrets_from_environment": true,
  "dependencies_locked": true,
  "log_sensitive_values": false
}
```

같은 폴더에 security_check.py를 저장합니다. 이 코드는 네트워크 요청 없이 위 파일만 읽습니다.
```python
import ipaddress
import json

with open("service_config.json", encoding="utf-8") as f:
    config = json.load(f)

rules = {
    "실습 환경": config["environment"] == "lab",
    "디버그 끄기": config["debug"] is False,
    "관리 주소는 로컬": ipaddress.ip_address(config["admin_bind"]).is_loopback,
    "전체 출처 허용 금지": "*" not in config["allowed_origins"],
    "비밀값은 환경에서 읽기": config["secrets_from_environment"] is True,
    "의존성 버전 고정": config["dependencies_locked"] is True,
    "민감정보 로그 금지": config["log_sensitive_values"] is False,
}

for name, passed in rules.items():
    print(f"{'PASS' if passed else 'FAIL'}: {name}")
print(f"결과: {sum(rules.values())}/{len(rules)} 통과")
raise SystemExit(0 if all(rules.values()) else 1)
```

macOS·Linux는 `python3 security_check.py`, Windows는 `py security_check.py`를 실행합니다. 예상 결과는 PASS 7개와 `결과: 7/7 통과`입니다. debug를 true로 바꾸면 `FAIL: 디버그 끄기`, `결과: 6/7 통과`가 나오고 종료 상태는 1이 됩니다. 이 예제는 설정 점검의 최소 뼈대이며 실제 서비스 코드·권한·배포 상태를 모두 보증하지 않습니다.

사람의 검토표에는 요구사항, 확인 방법, 증거 위치, 결과, 재검증 날짜를 적습니다. 권한 요구사항은 준비한 시험 계정으로 본인 로컬 서비스에서만 확인하고 토큰을 가린 결과를 기록합니다.

[흔한 실수]

자동 도구 통과만으로 안전하다고 단정하지 마세요. 범위를 넓혀 운영 데이터에 영향을 주거나 발견 목록만 쌓지 않습니다. 예외를 영구 허용하거나 증거에 비밀값을 남기지 않습니다.

[보안 주의]

타인 시스템이나 운영 주소에는 적용하지 않습니다. 본인 소유의 격리 환경과 가짜 데이터만 쓰고 이상하면 중단합니다. 비밀번호·토큰·개인정보는 화면·로그·보고서에 남기지 마세요. 실제 점검은 명시적 승인 범위 안에서만 수행합니다.

[직접 해볼 과제]

`tls_required`가 false이면 실패하는 규칙을 추가하세요. 발견 번호, 심각도, 근거, 수정, 재검증 결과를 표로 만들고 debug를 true로 바꿨다가 복구하는 과정을 기록합니다.

[확인문제]

1. 자동 검사 통과만으로 서비스 전체가 안전하다고 말할 수 없는 이유는 무엇인가요?
2. 점검 전에 대상·제외 대상·중단 조건을 문서화해야 하는 이유는 무엇인가요?
3. 발견 항목을 수정한 뒤 같은 절차로 재검증해야 하는 이유는 무엇인가요?

[다음 학습]

AI-012에서 작은 문서 검색 AI를 만들며 문서 접근권한과 입력 데이터 보호를 적용합니다.

[공식 참고 자료]

https://csrc.nist.gov/pubs/sp/800/115/final
https://csrc.nist.gov/pubs/sp/800/218/final
https://owasp.org/www-project-application-security-verification-standard/
https://owasp.org/www-project-web-security-testing-guide/
https://www.cisa.gov/resources-tools/resources/secure-by-design
https://docs.python.org/3/library/ipaddress.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
1,915
어제
5,103
최대
16,772
전체
772,969
Copyright © 소유하신 도메인. All rights reserved.