03.애플리케이션 보안 - 04.기타 애플리케이션 보안
웹 취약점 및 버그 유형
1. OWASP Top 10
- OWASP(The Open Web Application Security Project)
- 신뢰성 있는 웹 애플리케이션 개발 및 운영을 위한 웹 취약점의 우선순위와 위험도 기준의 정보보안 가이드라인을 제시
1. 인젝션
- 개요
- SQL, OS, XXE, LDAP 인젝션 취약점
- 적절한 입력 유효성 검사 없이 신뢰할 수 없는 데이터가 명령이나 쿼리문의 일부분으로 인터프리터로 전송될 때 발생
- 예상치 못한 명령 실행, 접근권한 없이 데이터 접근 등의 문제 발생
- 대응방안
- 서버 측 입력 검증, 특수문자 필터링 및 유효성 검사
- 화이트리스트 조합 사용
2. 취약한 인증
- 개요
- 인증 및 세션관리 관련 애플리케이션 기능이 잘못 구현됨
- 공격자에게 취약한 암호, 세션 토큰 등을 제공
- 다른 사용자의 권한을 얻어 익스플로잇(Exploit)
- 대응방안
- 멀티팩터 인증 구현
- 기본 자격 증명 사용 금지
- 높은 수준의 암호 정책 구현
- 지연 로그인, 무작위 세션 ID, 세션 시간 초과 등등으로 제어
- 실패한 로그인 시도 기록(Log)
3. 민감한 데이터 노출
- 개요
- 중요한 정보를 제대로 보호하지 않음
- 암호화되어야 하는 정보들을 일반 텍스트로 노출
- 대응방안
- 데이터를 중요도에 따라 분류
- 암호화 적용, 적절한 키 관리 및 표준 알고리즘 사용
- 불필요한 데이터, 민감한 데이터를 포함하는 응답을 회피
- 캐싱 비활성화
4. XML 외부 개체(XXE)
- 개요
- 잘못된 설정, 오래된 XML프로세서는 XML 문서 내에서 외부 개체를 참조함
- 내부 시스템 스캔, 포트 스캔, 원격코드 실행, 서비스 거부 공격, 데이터 추출 등의 작업 가능
- 대응방안
- 서버 입력 유효성 검증, 필터링, 검사
- 모든 XML파서의 XML 외부 개체와 DTD 처리 비활성화
- JSON과 같은 덜 복잡한 형식 사용, 중요한 데이터의 연속화 방지, 모든 XML 프로세스 및 라이브러리 패치 (SOAP 1.2이상)
5. 취약한 접근 통제
- 개요
- 인증된 사용자가 수행할 수 있는 작업에 대한 제한이 제대로 적용되지 않을 때 발생
- 결함을 악용하여 타 사용자 계정에 접근 혹은 중요 파일 노출, 데이터 수정, 접근권한 변경이 가능
- 대응방안
- 배타적 자원허용
- 액세스 제어 실패 및 알림 로그 유지
- 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS) 사용 최소화
6. 잘못된 보안 구성
- 개요
- 응용 프로그램의 데이터를 안전하게 유지하는 제어장치의 부적절한 구현
- 보안 헤더를 잘못 설정
- 민감한 정보를 노출하는 오류메시지
- 패치 또는 업그레이드 시스템을 무시, 기본 구성을 사용
- 대응방안
- 불필요하고 사용되지 않는 기능 또는 프레임워크 제거
- 안전한 설치 프로세스 구현
- 제로 트러스트 모델 (내/외부를 막론하고 적절한 인증 절차 없이 누구도 신뢰하지 않음)을 구현
- 보호가 필요한 자산 및 데이터
- 사용자 권한 검토 및 업데이트
7. 크로스사이트 스크립팅(XSS)
- 개요
- 다른 사람의 웹 응용 프로그램의 페이지 출력에 스크립트를 주입
- 브라우저는 페이지의 일부로 믿고 스크립트를 실행
- 예) 링크를 클릭하면 피해자의 웹 브라우저에서 스크립트가 실행되어 세션, 쿠키, 사용자 자격 증명을 훔치거나 악성코드를 전달
- 대응방안
- 상황에 맞는 인코딩을 적용
- 엔티티 적용
8. 안전하지 않은 역직렬화
- 개요
- 직렬화 개념 : 응용 프로그램 코드에서 객체를 바이트 스트림으로 변환하거나 디스크에 저장하는 등의 다른 용도로 사용할 수 있는 형식으로 변환
- 역직렬화 과정 중 DoS 공격이나 원격 코드 실행과 같은 심각한 결과를 초래할 수 있도록 변조되는 것을 말함
- 대응방안
- 악성객체 생성이나 데이터 변조 방지를 위해 직렬화된 객체에 대한 디지털서명과 같은 무결성 검사를 구현
- 엄격한 형식 제약 조건을 적용
- 낮은 권한의 환경에서 코드를 분리하여 실행
- 모니터링하면서 예외와 오류를 기록
9. 알려진 취약점이 있는 구성요소 사용
- 개요
- 라이브러리 등의 구성요소를 사용하면서 검증하지 않거나 해당 요소의 업데이트된 버전을 사용하지 않고 특정 기능을 구현하는 광범위한 문제
- 대응방안
- 클라이언트 및 서버 측 구성요소의 종속성과 함께 버전 업데이트, 패치
10. 불충분한 로깅 및 모니터링
- 대응방안
- 위심스러운 활동 (로그인 실패, 엑세스 제어 실패, 입력 유효성 검사 실패) 을 기록, 중앙 집중식 로그관리 솔루션 이용
- 변조 또는 삭제를 방지하기 위한 감사 시스템
2. 주요 정보통신기반시설 취약점 분석, 평가기준 고시
- 주요 정보통신기반시설로 지정된 첫 회는 지정 후 6개월 이내에 취약점 분석 및 평가를 실시해야 한다.
- 6개월 이내 취약점 분석 및 평가를 수행치 못할 경우 관할 중앙행정기관의 장의 승인을 얻어 3개월 연장 가능하다.
웹 취약점 및 버그 방지 개발 방법
1. 소프트웨어 개발 보안(보안 약점)
- 안전한 소프트웨어 개발을 위해, 소스코드 등에 존재할 수 있는 잠재적인 보안 약점 제거, 보안을 고려한 기능 설계, 구현 등 SDLC(Software Development Life Cycle) 전반에서 수행하는 일련의 보안 활동
-
SDLC 단계별 소프트웨어 개발 보안 활동
1.요구사항 분석 2.설계단계 3.구현단계 보안 항목 요구사항 식별
⦁ 암호화해야 할 중요 정보
⦁ 중요 기능에 대한 분류(시스템 리부팅)
보안 요구 항목 20개-세분화 54개위협원 도출
⦁ 위협 모델링: 보안 전문가, 개발 전문가
⦁ 전문방법론(도구):MS 등에서 제공
⦁ 분석/설계 20개, 구현 54개의 위협원이 반영될 수 있도록 설계표준 코딩, SW 개발 보안 가이드 준수
⦁ 구현단계에서 준수할 수 있도록 설계단계에서 가이드
개발 가이드 제공
⦁ 개발 보안 가이드를 래퍼런스로 하여 개발 환경에 적합하도록 구축
⦁ 표준 코딩 가이드는 사이트마다 작성
소스코드 보안 약점 진단(도구 활용) -
Secure SDLC
방법론 내용 CLASP ⦁ OWASP의 보안 약점을 고려한 개발 보안 방법론
⦁ 개념, 역할, 활동을 정의한 모델MS-SDL ⦁ PreSDL 단계에서 위협분석을 수행하고, ‘분석, 설계, 구현, 테스트’의 SDLC 단계에서 보안을 고려한 모델링을 수행
⦁ Microsoft의 자동화 진단 도구로 활용7-Touch Point 위협분석, 코드리뷰, 자동화 진단 등의 활동을 정의
2. 분석/설계단계 개발 보안 활동
1. 분석단계 활동
- 개요
- ‘처리 대상 정보’와 ‘해당 정보를 처리하는 기능’을 대상으로, 적용해야 하는 보안 항목을 식별
- 사용자 권한 : 권한을 가진 사용자만이 안전하게 수집, 전송, 처리, 보관, 폐기해야 하는 정보를 식별한다.
- 법/제도 : 개인정보보호법, 정보통신망법, 금융거래법 등 다양한 법, 제도, 규정에 의하여 보호해야 하는 정보를 정의한다.
- 보안정책 : 내부정책(개인정보보호 규정, 정보보안 규정)과 외부정책(관련 지침) 자료 등을 기준으로 보안 항목을 식별한다.
- 요구사항1 : 입력 데이터 검증 및 표현 (10개 항목)
- DBMS 조회 및 결과 검증
- SQL문 생성 시 사용하는 입력값과 쿼리 결과에 대한 검증 방법을 설계
- 유효하지 않은 값에 대한 처리 방법을 설계
- XML 조회 및 결과 검증
- XPath, XQuery 생성 시 사용하는 입력값과 조회 결과에 대한 검증 방법을 설계
- 유효하지 않은 값에 대한 처리 방법을 설계
- 디렉터리 서비스 조회 및 결과 검증
- LDAP 생성 시 사용하는 입력값과 조회 결과에 대한 검증 방법을 설계
- 유효하지 않은 값에 대한 처리 방법을 설계
- 시스템 자원 접근 및 명령어 수행 입력값 검증
- 시스템 자원 접근 및 명령어 수행을 위해 사용하는 입력값과 조회 결과에 대한 검증 방법을 설계
- 유효하지 않은 값에 대한 처리 방법을 설계
- 웹 서비스 요청 및 결과 검증
- 웹 서비스 요청과 응답 결과에 대한 검증 방법과 적절하지 않은 데이터에 대한 처리 방법을 설계
- 예) 게시판에 스크립트 게시 후 게시 항목 응답
- 웹 기반 중요 기능 수행요청 유효성 검증
- 사용자 권한 확인이 필요한 중요 기능 및 서비스 요청에 대한 유효성 검증 방법을 확인
- 유효하지 않은 요청에 대한 처리 방법을 설계(예: 결제 기능에 대한 인증)
- HTTP 프로토콜 유효성 검증
- 사용자가 원하지 않은 결과를 생성할 수 있는 HTTP 헤더 및 응답 결과에 대한 유효성을 검증하는 방법을 설계
- 유효하지 않은 요청의 처리 방법을 설계 (예: 비정상적인 HTTP 헤더, 자동연결 URL 링크)
- 허용된 범위 내 메모리 접근
- 허용된 범위의 메모리 버퍼에만 접근하여 저장 및 읽기를 수행하고 버퍼오버플로우가 발생하지 않도록 처리 방법을 설계
- 보안기능 동작에 사용되는 입력값 검증
- 보안기능 동작을 위해 사용하는 입력값과 함수의 외부 입력값 및 수행결과에 대한 처리 방법을 설계 (예: 인증, 인가, 권한부여 등의 보안 기능)
- 업로드/다운로드 파일 검증
- 업로드/다운로드 파일의 무결성, 실행권한 등에 관한 유효성 검사 방법과 검사 대응 방안을 설계
- DBMS 조회 및 결과 검증
- 요구사항2 : 보안기능(8개 항목)
- 인증 대상 및 방식
- 중요 정보 및 기능과 인증방식을 정의하고, 정보접근과 중요 기능 수행 시 인증 기능을 우회할 수 없도록 설계
- 인증 수행 제한
- 반복적인 인증 시도를 제한하도록 설계
- 인증실패 시 인증제한 기능을 설계
- 비밀번호 관리
- 안전한 비밀번호 조합규칙을 설정하고 주기적으로 변경하도록 설계 (예: 패스워드 길이, 허용문자 조합 및 하드코딩 금지)
- 중요 자원 접근 통제
- 중요 자원을 정의하고, 정의한 중요 자원에 대한 접근을 통제하는 신뢰할 수 있는 방법과 접근 통제 실패 시 대응방안을 설계 (예: 주요 설정, 민감정보에 대한 접근 권한)
- 암호키 관리
- 암호키의 생성, 분배, 접근, 파기 등 암호키 생명주기를 안전하게 관리할 수 있는 방법을 설계
- 암호연산
- 국제표준 혹은 검증된 프로토콜로 인정된 안전한 암호 알고리즘을 서정하여, ‘충분한 암호키 길이’, ‘솔트’, ‘충분한 난수값’에 기반한 암호연산의 수행 방법을 설계
- 중요 정보 저장
- 중요 정보 저장 시, 안전한 저장 및 관리 방법을 설계 (예: 패스워드, 개인정보, 민감정보)
- 중요 정보 전송
- 중요 정보 전송 시, 안전한 전송 방법을 설계 (예: 정책에 의하여 중요 정보로 분류한 정보)
- 인증 대상 및 방식
- 요구사항3 : 에러처리(1개 항목)
- 예외처리
- 오류 메시지에 중요 정보가 포함되어 출력되거나, 에러 및 오류가 부적절하게 처리되어 의도하지 않은 상황이 발생하는 것을 방지하기 위하여 안전한 처리 방법을 설계 (예: 개인정보, 시스템정보 등의 노출 방지)
- 예외처리
- 요구사항4 : 세션통제(1개 항목)
- 세션통제
- 세션을 안전하게 관리할 수 있는 방법을 설계 (예: 세션간 데이터 공유금지, 세션 ID 노출 방지, 재로그인시 세션 ID 변경, 세션 유효기간 등)
- 세션통제
2. 설계단계의 보안 요구 사항 적용
- 요구사항정의서의 보안 기능 요구사항 확인
- 요구사항 추적표를 활용한 SDLC 단계별 산출물 확인
- 적절한 보안대책 반영여부를 진단
3. 구현단계 개발 보안 활동 (보안약점)
- 소스코드 보안 취약점 7개
1. 입력데이터 검증 및 표현
- 프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식 지정으로 인해 발생할 수 있는 보안 약점
- SQL 삽입 : 사용자의 입력 값 등 외부 입력 값이 SQL 쿼리에 삽입되어 공격자가 쿼리를 조작해 공격할 수 있는 보안 약점
- 경로조작 및 자원 삽입 : 외부 입력 값에 대한 검증이 없거나 혹은 잘못된 검증을 거쳐서 시스템 자원에 접근하는 경로 등의 정보로 이용될 때 발생하는 보안 약점
- 크로스사이트스크립트 : 검증되지 않은 외부 입력 값에 의해 브라우저에서 악의적인 코드가 실행되는 보안 약점
- 운영체제 명령어 삽입 : 운영체제 명령어를 구성하는 외부 입력 값이 적잘한 필터링을 거치지 않고 쓰여서 공격자가 운영체제 명령어를 조작할 수 있는 보안 약점
- 위험한 형식 파일 업로드 : 파일의 확장자 등 파일 형식에 대한 검증 없이 업로드를 허용하여 발생하는 보안 약점
- 신뢰되지 않은 URL 주소로 자동 접속 연결 : 사용자의 입력 값 등 외부 입력 값이 링크 표현에 사용되고, 이 링크를 이용하여 악의적인 사이트로 리다이렉트(Redirect)되는 보안 약점
- XQuery 삽입 : 사용자의 입력 값 등 외부 입력 값이 XQuery 표현에 삽입되어 악의적인 쿼리가 실행되는 보안 약점
- XPath 삽입 : 사용자의 입력 값 등 외부 입력 값이 XPath 표현에 삽입되어 악의적인 쿼리가 실행되는 보안 약점
- LDAP 삽입 : 검증되지 않은 입력 값을 사용해서 동적으로 생성된 LDAP문에 의해 악의적인 LDAP 명령이 실행되는 보안 약점
- 크로스사이트 요청 위조
- 검증되지 않은 외부 입력 값에 의해 브라우저에서 악의적인 코드가 실행되어 공격자가 원하는 요청(Request)이 다른 사용자(관리자 등) 권한의 서버로 전송되는 보안 약점
- 지정된 경로 밖의 파일 시스템 경로에 접근하게 되는 보안 약점
- HTTP 응답 분할 : 사용자의 입력 값 등 외부 입력 값이 HTTP 응답 헤더에 삽입되어 악의적인 코드가 실행되는 보안 약점
- 정수 오버플로 : 정수를 사용한 연산의 결과가 정수값의 범위를 넘어서는 경우 프로그램이 예기치 않게 동작할 수 있는 보안 약점
- 보안기능 결정에 사용되는 부적절한 입력값 : 사용자에 의해 변경될 수 있는 값을 사용하여 보안 결정(인증/인가/권한부여 등)을 수행하여 보안 매커니즘이 우회될 수 있는 보안 약점
- 메모리 버퍼 오버플로 : 버퍼를 이용하여 메모리를 사용할 때, 버퍼의 크기보다 큰 데이터를 버퍼에 기록하는 경우 데이터가 버퍼의 경계를 넘어 다른 메모리 영역을 침범하기 때문에 발생하는 보안 약점
- 포맷 스트링 삽입 : printf(), fprintf(), sprintf() 와 같이 포맷 스트링을 사용하는 함수를 사용하는 경우, 외부로부터 입력된 값을 검증하지 않고 입출력 함수의 포맷 문자열 그대로 사용하는 경우 발생할 수 있는 보안약점
2. 보안 기능
- 보안 기능(인증, 접근 제어, 기밀성, 암호화, 권한 관리 등)을 적절하지 않게 구현 시 발생할 수 있는 보안 약점
- 적절한 인증 없는 중요 기능 허용 : 적절한 인증 없이 중요 정보(계좌이체 정보, 개인정보 등)를 열람(또는 변경)할 수 있도록 하는 보안 약점
- 부적절한 인가 : 적절한 접근 제어 없이 외부 입력 값을 포함한 문자열로 서버 자원에 접근(혹은 서버 실행 인가)할 수 있게 하는 보안 약점
- 중요한 자원에 대한 잘못된 권한 설정 : 중요 자원(프로그램 설정, 민감한 사용자 데이터 등)에 대한 적절한 접근 권한을 부여하지 않아 의도하지 않은 사용자에 의해 중요 정보가 노출,수정되는 보안 약점
- 취약한 암호화 알고리즘 사용 : 중요 정보(패스워드, 개인정보 등)의 기밀성을 보장할 수 없는 취약한 암호 알고리즘을 사용하여 정보가 노출될 수 있는 보안 약점
- 중요 정보 평문저장 : 중요 정보(패스워드, 개인정보, 사용자 권한 정보 등)를 암호화하여 저장하지 않아 발생할 수 있는 보안 약점
- 중요 정보 평문전송 : 중요 정보(패스워드, 개인정보, 사용자 권한 정보 등) 전송 시 암호화하거나 암호화 채널을 통하지 않는 경우 발생할 수 있는 보안 약점
- 하드코드 된 비밀번호 : 소스코드 내에 비밀번호를 하드코딩함에 따라 관리자 비밀번호가 노출되거나 주기적 변경 등 수정(관리자 변경 등)이 쉽지 않은 보안 약점
- 충분하지 않은 키 길이 사용 : 데이터의 기밀성, 무결성 보장을 위해 사용되는 키의 길이가 충분하지 않아 기밀정보 누출, 무결성이 깨지는 보안 약점
- 적절하지 않은 난수 값 사용 : 예측 가능한 난수 사용으로 공격자로 하여금 다음 숫자 등을 예상하여 시스템 공격이 가능한 보안 약점
- 하드코드 된 암호화 키 : 소스코드 내에 암호화 키를 하드코딩 하는 경우 향후 노출될 수 있으며, 키 변경 등 수정이 쉽지 않은 보안 약점
- 취약한 비밀번호 허용 : 비밀번호 조합규칙(영문, 숫자, 특수문자 등) 및 길이가 충분하지 않아 노출될 수 있는 보안 약점
- 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 : 쿠키(세션 ID, 사용자 권한 정보 등 중요 정보)를 사용자 하드디스크에 저장함으로써 개인정보 등 기밀정보가 노출될 수 있는 보안 약점
- 주석문 안에 포함된 패스워드 등 시스템 주요 정보 : 소스코드 내의 주석문에 비밀번호가 하드코딩 되어 비밀번호가 노출될 수 있는 보안 약점
- 비밀번호 일방향 해시 함수 사용 : 공격자가 솔트 없이 생성된 해시값을 얻게 된 경우, 미리 계산된 레인보우 테이블을 이용하여 원문을 찾을 수 있는 보안 약점
- 무결성 검사 없는 코드 다운로드 : 원격으로부터 소스코드 또는 실행파일을 무결성 검사 없이 다운로드 받고 이를 실행하는 경우 공격자가 악의적인 코드를 실행할 수 있는 보안 약점
- 반복된 인증시도 제한 기능 부재 : 프로그램 내에서 로그인과 같은 인증시도를 하는 수를 제한하지 않거나 인증시도에 대한 측정을 구현하지 않아서 발생하는 보안 약점
3. 시간 및 상태
- 동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안 약점
- 경쟁조건-검사시점과 사용시점(TOCTOU) : 멀티프로세스 상에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안 약점
- 제어문을 사용하지 않는 재귀함수 : 적절한 제어문 사용이 없는 재귀함수에서 무한 재귀가 발생하는 보안 약점
4. 에러처리
- 에러를 처리하지 않거나, 불충분하게 처리하여 에러정보에 중요 정보(시스템 등)가 포함될 때 발생할 수 있는 보안 약점
- 오류 메시지를 통한 정보 노출 : 개발 시 활용을 위한 오류정보의 출력 메시지를 배포될 버전의 S/W에 포함시킬 때 발생하는 보안 약점
- 오류 상황 대응 부재 : 시스템에서 발생하는 오류 상황을 처리하지 않아 프로그램 다운 등 의도하지 않은 상황이 발생할 수 있는 보안 약점
- 적절하지 않은 예외 처리 : 예외에 대한 부적절한 처리로 인해 의도하지 않은 상황이 발생할 수 있는 보안 약점
5. 코드 오류
- 타입변환 오류, 자원(메모리)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩오류로 인해 유발되는 보안 약점
- 널(Null) 포인터 역참조 : Null로 설정된 변수의 주소값을 참조했을 때 발생하는 보안 약점
- 부적절한 자원 해제 : 사용된 자원을 적절히 해제하지 않으면 자원의 누수 등이 발생하고, 자원이 모자라 새로운 입력을 처리하지 못하는 보안 약점
- 해제된 자원 사용 : 메모리를 해제한 자원을 참조할 경우, 예기치 않은 오류가 발생할 수 있는 보안 약점
- 초기화되지 않은 변수 사용 : 변수를 초기화하지 않고 사용하는 경우 예기치 않은 오류가 발생할 수 있는 보안 약점
6. 캡슐화
- 중요한 데이터 또는 기능성을 불충분하게 캡슐화하였을 때 인가되지 않은 사용자에게 데이터 누출이 가능해지는 보안 약점
- 잘못된 세션에 의한 데이터 정보 노출 : 잘못된 세션에 의해 권한 없는 사용자에게 데이터 노출이 일어날 수 있는 보안 약점
- 제거되지 않고 남은 디버그 코드 : 디버깅을 위해 작성된 코드를 통해 권한 없는 사용자의 인증우회(또는 중요 정보) 접근이 가능해지는 보안 약점
- 시스템 데이터 정보 노출 : 사용자가 볼 수 있는 오류 메시지나 스택 정보에 시스템 내부 데이터나 디버깅 관련 정보가 공개되는 보안 약점
- Public 메소드로부터 반환된 Private 배열 : private로 선언된 배열을 public으로 선언된 메소드를 통해 반환(return)하면 그 배열의 레퍼런스가 외부로 공개되어 외부에서 배열이 수정될 수 있는 보안 약점
- Private 배열에 Public 데이터 할당 : public으로 선언된 데이터 또는 메소드의 인자가 private 선언된 배열에 저장되면 private 배열을 외부에서 접근할 수 있게 되는 보안 약점
7. API 오용
- 의도된 사용에 반하는 방법으로 API를 사용하거나 보안에 취약한 API를 사용할 때 발생할 수 있는 보안 약점
- DNS lookup 에 의존한 보안 결정 : DNS는 공격자에 의해 DNS 스푸핑 공격 등이 가능하므로 보안 결정을 DNS 이름에 의존할 경우, 보안 결정 등이 노출되는 보안 약점
- 취약한 API 사용 : 취약하다고 알려진 함수를 사용할 경우 예기치 않은 오류가 발생할 수 있는 보안 약점
4. SQL Injection
1. SQL Injection
- 개요
WHERE ID = '1' ...
: 1을 파라미터 입력한 정상 구문WHERE ID = '' OR 1=1 #
: ’ OR 1=1 # 을 입력하여 공격
- SQL Injection의 특징
- 개념
- 사용자가 서버에 제출한 데이터가 SQL Query로 사용되어 데이터베이스 및 응용 시스템에 영향을 주는 공격기법
- SQL문을 조작하거나 오류를 발생시켜 정보를 유출하거나 변조
- OWASP TOP 10에서 가장 위험한 공격 기법 중 하나
- 발생 원인
- 공격자의 입력 값이 데이터베이스의 쿼리 작성에 이용되는 환경에서 입력 값 미검증 또는 부적절한 검증
- 동적으로 Query 구문이 완성되는 애플리케이션
- 결과
- 쿼리 조작을 통한 데이터베이스 노출 및 변조
- 웹 애플리케이션 인증 우회
- 데이터베이스 덤프, 파괴
- 시스템 커맨드의 실행 (MS-SQL)
- 시스템 주요 파일 노출
- DDoS 공격
- 공격 도구
- Havij
- Pangolin
- HDSL
- 대응 방안
- 입력 값 필터링
- 입력 값 크기 제한
- Dynamic SQL 지양
- ORM 사용 지향
- Prepared Statement 사용
- 데이터 타입 패턴 체크
- 데이터베이스 권한 관리
- 공통 오류 페이지 사용(오류 반환 설정)
- WAS/IDS
- Stored Procedure 사용
- 개념
2. Blind SQL Injection
- 개요
- 문자열을 하나씩 자르고 ASCII 코드 값을 입력하여 해당 문자열을 완성하는 공격 기법
- SQL 실행결과가 True / False 로 오기 때문에 입력해본 문자열이 맞는지 틀린지 공격자가 알 수 있음
- SQL Injection의 유형
- 인증 우회
- 취약한 인증방식(ID/PW를 입력받아 ID와 PW가 일치하는 레코드가 존재하는지 검사하는 방식)에서 SQL문을 조작하여 PW를 무력화
- WHERE 절 이하의 조건이 항상 참이 되도록 하고, 쿼리 문에 에러가 없어야 함
- 인증용 SQL문 :
SELECT * FROM USER WHERE ID="입력 값" AND PW="입력 값";
- 변조된 SQL문 :
SELECT * FROM USER WHERE ID='' OR '1'='1' AND PW=''--
- 변조된 SQL문 :
SELECT * FROM USER WHERE ID='NAME'; DELETE FROM USER--
- 인증용 SQL문 :
- Blind SQL Injection
- SQL Injection에 대응하기 위해 내부 데이터베이스 오류를 보여주지 않도록 설정한 경우, 참과 거짓을 구분할 수 있는 구문을 만들어 데이터를 알아내는 방법
- SQL Injection에서 데이터를 삽입 및 수정하려면 DB 스키마를 먼저 파악해야 함 (DB 이름, 테이블 명, 컬럼명, 컬럼타입 순)
- 변조된 SQL문 :
' AND SUBSTRING(DB_NAME(),1,1)='W'
- 변조된 SQL문 :
- Mass SQL Injection
- 한 번의 공격으로 대량의 DB값이 변조되어 서비스에 치명적인 악영향을 끼치는 확장된 개념의 SQL Injection 공격 기법
- Cookie Injection : Get/Post가 아닌 Cookie를 통해 데이터가 전달되는 방식으로, 대부분의 WAF(Web Application Firewall)에서 조차 Get/Post 방식만을 검사하기 때문에 우회할 수 있는 통로로 활용되어 Mass SQL Injection 공격에 활용될 수 있음
- 인증 우회
3. Union SQL Injection
- 개념
- SQL 문에 union을 입력해서 원하는 테이블에 접근
' UNION SELECT FIRST_NAME, 2 FROM USERS #
4. JAVA 언어에서 SQL Injection 대응 방안
- preparedStatement 이용
String name = request.getParamenter("name");
String query = "SELECT * FROM USER WHERE NAME=?";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, name);
rs = stmt.executeQuery();
5. 운영체제 명령어 삽입
- 운영체제 명령어 삽입 (Command Injection)
- 입력 값을 검증하지 않아서 운영체제 명령어를 실행할 수 있는 취약점
shell_exec
함수 사용- 코드 :
shell_exec('ping ', $target );
- 입력값 :
192.168.0.10 | ls
- JAVA 언어에서 운영체제 명령어 삽입 대응방안
- 취약 코드
String cmd = new String("cmd.exe /K manDB.bat");
Runtime.getRuntime().exec(cmd + "c:\\data\\" + version);
- 입력값 검증 후 대입해야 함
- 취약 코드
6. 위험한 파일형식 업로드
- 개요
- 스크립트가 실행될 수 있는 프로그램을 업로드하여 악성 스크립트를 실행하게 함
- 이런 스크립트를 웹쉘(Web Shell) 이라고 함
- 코드와 같은 형태를 게시판을 통해 업로드하고 url 호출하여 서버에 명령을 실행
- 대응 방안
- 탐지된 파일 삭제
- 업로드 확장자 체크
- 업로드 파일 이름 변경, 이동 및 실행권한 제거
7. XSS(Cross Site Scripting)
1. XSS(크로스 사이트 스크립팅) 개요
-
개요
- 공격자가 제공한 실행 가능한 코드를 재전송하도록 하는 공격 기법
- 서버를 장악하지 않고도 사용자 정보가 유출될 수 있으며, 필터링을 우회할 수 있는 다양한 방법이 존재
- OWASP TOP 10 에서 가장 위험한 공격 기법 중 하나
- 발생 원인
- 사용자로부터 입력된 데이터에 대한 부적절한 검증을 통하여 웹 도큐먼트로 출력
- 서버를 경유하여 조작된 웹 페이지 및 URL을 열람하는 클라이언트를 공격
- 결과
- 개인정보 유출
- Cookie Access
- DOM(Document Object Mode) Access 를 통한 페이지 조작
- Clipboard Access
- Key logging
- 악성코드 실행 및 세션 하이제킹
- 대응 방안
- 서버 측면
- 사용자 입력 문자열에서
<. >, &, "
등을 replace 와 같은 문자변환 함수나 메소드로<, >, &, "
로 치환 - HTML tag 리스트 선정과 해당 태그만 허용 (White list)
- 보안성이 검증된 API를 사용해 위험한 문자열 제거(OWASP의 ESAPI 활용)
- 입력값 검증 - 서버에서 White List 방식 필터링
- 출력 값 인코딩 - HTML 인코딩 출력
- HTML 포맷 입력 페이지 최소화
- 중요 정보 쿠키 저장 지양
- 인증강화 - 세션과 IP를 통합하여 서버에서 인증
- TCP 연결은 세션값만 확인
- 스크립트에 의한 쿠키 접근 제한
- 사용자 입력 문자열에서
- 클라이언트 측면
- 주기적 패스워드 변경
- 브라우저 최신 패치
- 링크 클릭 대신 URL 직접 입력
- 브라우저 보안 옵션 등급 상향(쿠키 사용 금지)
- 서버 측면
2. XSS의 종류
- Stored XSS
- 게시판에 악성 스크립트를 올리고 사용자가 클릭하면 악성 스크립트를 실행
- Reflected XSS
- 메일로 악성 스크립트가 포함된 첨부파일을 사용자에게 전송
- 해당 첨부파일을 열면 악성스크립트를 포함한 요청이 취약점이 있는 웹 서버에 전송
- 악성 스크립트를 포함한 응답을 웹 서버로부터 받음
- 악성 스크립트는 서버에 저장되지 않음
3. XSS의 공격 대상
항목 | 내용 |
---|---|
XSS에 취약한 웹 페이지 | ⦁ HTML을 지원하는 게시판 ⦁ Search Page ⦁ Personalize Page ⦁ Join Form Page ⦁ Referer를 이용하는 Page ⦁ 기타 사용자로부터 입력받아 화면에 출력하는 모든 페이지에서 발생 |
XSS 공격 | 이용 HTML Tag (예: <script>,<object>,<applet>,<embed>,<img> )언어/스크립트 : Javascript, VB Script, Active X, HTML, Flash 대상 코드의 위치 : URL parameter, Form elements, Cookie, DB Query 등 |
사례 | <script>...</script> <img src="javascript : ..."> <div style="background-image : url(javascript...)"></div> <embed>...</embed> <iframe>...</iframe> |
4. XSS에 안전한 JAVA 소스코드
- 취약한 소스코드
<p>NAME : <%=name%></p>
- 안전한 소스코드
name = name.replaceAll("<", "<");
name = name.replaceAll(">", ">");
name = name.replaceAll("&", "&");
name = name.replaceAll(""", """);
<p>NAME : <%=name%></p>
8. CSRF(Cross Site Request Forgery, 크로스 사이트 요청 위조)
- 개념
- 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격
- 피해자에 대해 사용자가 인식하지 못한 상황에서 의도하지 않은 공격 행위를 수행하게 하는 공격
- 세션쿠키, SSL 인증서 등 자동으로 입력된 신뢰정보를 기반으로 사용자의 요청을 변조하여 해당 사용자의 권한으로 악의적 공격 수행
- 사용자를 통해 공격이 이루어지기 때문에 공격자 추적이 불가능
- 세션 라이딩, 원 클릭 공격, 악의적 연결, 자동화된 공격, SEA SURF, IFRAME EXPLOIT 등으로 불림
- 과정
- 악성 스크립트가 포함된 스크립트를 웹 서버에 올림
- 사용자는 악성 스크립트가 포함된 스크립트를 요청
- 악성 스크립트는 웹 서버에 서비스를 요청
- 사용자는 이미 인증을 받았기 때문에 정상적인 사용자가 웹 서버를 공격하게 됨
- 예제
- 위조 요청을 전송하는 서비스에 사용자가 로그인한 상태
- 사용자가 해커가 만든 피싱 사이트에 접속 혹은 XSS 공격을 성공한 정상 사이트를 통해 CSRF 공격을 수행
-
주요 특징
구분 내용 발생원인 ⦁ 웹 서버에 외부의 입력 값에 대한 인증서 등을 저장하여 해당 내용을 열람하게 할 경우 발생
⦁ 이메일, 특정 웹사이트 접속 사용자 등이 웹사이트 정보를 로딩하는 과정에서 다른 URL을 요청하게 함결과 관리자 계정인 경우 권한 관리, 게시물 삭제, 사용자 등록 및 삭제 대응 방안 ⦁ 입력 폼 작성 시 POST 방식을 사용
⦁ 입력 폼과 해당 입력 처리 프로그램 간에 토큰을 사용
⦁ 중요한 기능에 대해 세션 검증과 재인증 처리 또는 트랜잭션 서명을 수행
⦁ referrer 검증
9. 포맷 스트링(Format String)
- 개요
- 데이터에 대한 포맷 스트링을 정확하게 정의하지 않아서 발생되는 보안 취약점
- printf 함수에 의해서 해석되는 문자열 “str”은 문자열이 아니라 형식 지시자를 포함한 포맷스트링으로 인식
- 버퍼 오버플로우처럼 가장 심각한 보안 취약점
- 포맷 스트링 문자를 사용한 메모리 열람, 메모리 변조, 셀코드(Shell Code) 삽입과 같은 보안 취약점이 발생
- 대상 함수 목록
- Fprintf
- printf
- sprintf
- snprintf
- vfprintf
- vprintf
- vsprintf
- syslog
DRM 기술 개념 및 활용
1. DRM(Digital Rights Management) 개요
- DRM(Digital Rights Management)
- 디지털 컨텐츠를 안전하게 보호할 목적으로 암호화 기술을 이용
- 허가되지 않은 사용자로부터 컨텐츠 저작권 관련 당사자의 권리 및 이익을 지속적으로 보호 및 관리하는 시스템
- DRM 요소 기술
- 암호화 : 대칭키 및 비대칭키 암호화 기술
- 인증 : 정당한 사용자 식별을 위한 인증
- Watermarking : 원저작권 정보 삽입 및 식별 수행
- 사용자 Repository : 정당한 사용자 및 라이선스 정보 저장
- 사용자 권한 관리 : 열람 및 배포에 대한 권리, 편집, 복사, 다운로드 등의 권한 관리
- Temper Proofing : 불법 수정 여부를 검증, Cracking 을 방지
2. DRM 처리방식
-
DRM 개념도
Watermarking
1. 워터마킹(Watermarking)
- 디지털 정보에 사람이 인지할 수 없는 마크를 삽입
- 디지털 컨텐츠에 대한 소유권을 추적할 수 있는 기술
- 정보은닉기술
- 오디오, 비디오, 이미지 등의 디지털 데이터에 삽입되는 또 다른 디지털 데이터로 Steganography 기법 중 하나
2. 워터마킹 특징
기술적 특징 | 주요 내용 |
---|---|
비인지성(Fidelity) | 사용자의 워터마크 정보 인지 불가, 데이터 품질 저하 없음 |
강인성(Robustness) | 변형에 대한 견고성 유지, 삽입 정보 제거불가 |
연약성(effeminacy) | 컨텐츠 복제와 관계없이 워터마크 복제 불가능 |
위조방지(Tamper-resistance) | 워터마크를 삭제하려는 고의적인 신호에 제거되지 않아야 함 |
키 제한(Key-resistance) | 소수의 사용자만 워터마크를 추출할 수 있는 키 제공 |
3. Wartermarking 공격 기법
- Filtering Attack : 워터마크를 노이즈로 보고 노이즈 제거 방법을 활용
- Copy Attack : 임의의 신호를 추가하여 워터마크를 사용하지 못하게 함
- Mosaic Attack : 워터마크가 검출되지 않도록 작은 조각으로 분해하여 다시 합침
- Template Attack : 워터마크의 패턴을 파괴하여 검출되지 않도록 함
4. 핑거프린트(Fingerprint)
- 워터마킹 기법 중 하나
- 디지털 컨텐츠 원저작자 정보(판매자)와 함께 구매자 정보도 삽입
- 디지털 컨텐츠가 불법적으로 유통될 때 불법적으로 유통시킨 구매자를 확인할 수 있는 디지털 컨텐츠 추적기술
- Dual Watermark 라고도 함
- 구매자가 다르더라도 컨텐츠 내용 자체는 동일함
포렌식(Forensic) 개요
1. 디지털 포렌식(Digital Forensic)
1. 정의
- 디지털 기기를 대상으로 발생하는 특정 행위의 사실관계를 법정에서 증명하기 위한 방법 및 절차
- 과학수사 및 수사과학 분야에서 디지털 기기를 대상으로 하는 기술
2. 디지털 증거휘발성
용어 | 내용 |
---|---|
디지털 증거 | 컴퓨터 또는 기타 디지털 저장매체에 저장되거나 네트워크를 통해 전송 중인 자료로서 조사 및 수사업무에 필요한 증거자료를 말한다. |
디지털 증거분석 | 컴퓨터 또는 기타 디지털 저장매체(네트워크를 통해 전송 중인 자료를 포함)에 남아있는 자료에 대한 원본 보존과 사건 관련 증거를 과학적인 절차를 통하여 추출, 검증, 판단하는 조사 및 수사과정 |
휘발성 증거 | 컴퓨터 실행 시 일시적으로 메모리 또는 임시파일에 저장되는 증거로 네트워크 접속상태, 프로세스 구동상태, 사용중인 파일 내역 등 컴퓨터 종료와 함께 삭제되는 디지털 증거이다. |
비휘발성 증거 | 컴퓨터 종료 시에도 컴퓨터 또는 기타 디지털 저장매체에 삭제되지 않고 남아있는 디지털 증거이다. |
3. 디지털 포렌식 원칙
기본원칙 | 내용 |
---|---|
정당성 원칙 | ⦁ 증거가 적법절차에 의해 수집되었는가? ⦁ 위법수집 증거 배제법칙: 위법절차를 통해서 수집된 증거는 증거 능력이 없다(즉, 해킹을 통해서 수집된 증거) ⦁ 독수 독과(과실)이론: 위법하게 수집된 증거에서 얻어진 2차 증거도 증거능력이 없다(불법적인 해킹을 통해서 얻은 패스워드로 특정파일을 복호화하여 얻은 증거) |
재현원칙 | ⦁ 같은 조건과 상황 하에서 항상 같은 결과가 나오는가? ⦁ 불법 해킹 용의자의 해킹 툴이 증거능력을 가지기 위해서는 같은 상황의 피해 시스템에 툴을 적용할 경우 피해결과와 일치하는 결과가 나와야 한다. |
신속성 원칙 | ⦁ 디지털 포렌식의 전 과정이 신속하게 진행되었는가? ⦁ 휘발성 데이터의 특성 상 수사진행의 신속성에 따라 증거수집 가능여부가 달라진다. |
절차 연속성 원칙 | ⦁ 증거물 수집, 이동, 보관, 분석, 법정제출의 각 단계에서 담당자 및 책임자가 명확해야 한다. ⦁ 수집된 저장매체가 이동단계에서 물리적 손상이 발생하였다면, 이동 담당자는 이를 확인하고 해당 내용을 정확히 인수인계하여 이후의 단계에서 적절한 조치가 취해지도록 해야 한다. |
무결성 원칙 | ⦁ 수집된 증거가 위변조되지 않았는가? ⦁ 일반적으로 해시 값을 이용하여 수집 당시 저장매체의 해시 값과 법정 제출 시 저장매체의 해시 값을 비교하여 무결성을 입증해야 한다. |
- 디지털 포렌식 도구
- Encase, FTK
2. 휘발성 및 비휘발성 데이터
1. 휘발성 및 비휘발성 정보
휘발성 | 비휘발성 |
---|---|
⦁ 램슬랙 영역 ⦁ 램 비할당 영역 ⦁ 네트워크 설정 값 ⦁ 네트워크 연결정보 ⦁ 실행 중인 프로세스 ⦁ 열려진 파일 ⦁ 로그인 세션 ⦁ 운영체제 시간 |
⦁ 설정 값 ⦁ 로그 ⦁ 애플리케이션 파일 ⦁ 데이터 파일 ⦁ 스왑 파일 ⦁ 덤프 파일 ⦁ 하이버네이션 파일 ⦁ 임시 파일 |
2. 휘발성 데이터
- 종류
- 현재 컴퓨터 시스템 날짜 및 시간
- 현재 컴퓨터 시스템에서 실행되는 프로세스 정보
- 현재 컴퓨터 시스템 접속자
- 오픈된 포트
- 현재 실행되고 있는 프로그램
- 컴퓨터 시스템 최근 접속기록
- 고려사항
- 휘발성 데이터는 전원이 차단되면 데이터가 손실됨 -> 우선순위 고려
- 동작 중인 시스템 메모리 내 존재하는 데이터를 수집해야 함
netstat
을 활용한 네트워크 연결상태 정보- 윈도우 클립보드에 저장된 정보
- 휘발성 데이터 수집 우선순위
- Register 및 Cache 정보
- Routing Table, ARP Cache, Process Table, Kernel Statistics
- Memory
- Temporary File Systems
- Disk
- Remote Logging 과 Monitoring Data
- Physical Configuration, Network Topology
- Archival media
3. 비휘발성 데이터
- 고려사항
- 전원이 차단되어도 데이터 손실이 발생되지 않는 데이터로 저장장치를 압수
- 시스템 시각 및 데이터 변조를 방지하기 위한 조치 필요 -> 디스크 복제를 수행
- 비휘발성 데이터 수집 우선순위
- Registry, 시간정보, Cache, Cookie, History, E-Mail
- 암호화된 파일, 윈도우 로그 등
4. 로드카르 법칙
- 개요
- 접촉하는 두 개체는 서로 흔적을 주고 받는다는 원칙
- 사용자든 조사자든 동작 중인 시스템을 다루게 되면 해당 시스템은 변화가 발생
- 로드카르(교환) 법칙으로 영향을 받는 데이터
- 프로세스 활동
- 데이터 저장 및 삭제
- 네트워크 상의 데이터 흐름
- 접속 사이트 Cache Data, 최근 접속목록 Update, 클라이언트 IP 및 Port, 방문URL, 시간 등
3. 디지털 포렌식 절차
- 준비
- 사전 정보수집, 네트워크 구성현황, 서버 등의 수집/이송에 필요인원
- 질문서, 영장, 사무실 용도 등을 개괄적으로 파악
- 운영체제, 데이터베이스, 네트워크, 시스템 등 분야별 전문가
- 획득
- 전원확인, 컴퓨터의 시간 차 확인, 휘발성 정보수집, 주변장치 확보, 관련자료 확보
- 압수물 라벨링 및 포장
- 이송
- 전자파 차폐용기, X-RAY 통과금지, 차량 이동 시 충격완화 장치 준비
- 증거물 보관실(클린 룸, 항온항습 장치 유지)에 보관
- 분석
- 원본 쓰기방지 장치 연결, 사본 복제, 복사본으로 분석
- 전문 분야별 포렌식 프로그램 활용, 분석과정을 명확하게 기록, 재현대비
- 증거분석서 작성
- 쉽고 평이하게 분석과정을 상세하게 기록
- 발견 증거물(삭제파일)의 경로기재 및 사진을 첨부
- 보관
- 전자파 차폐, 항온 항습장치 유치
- 봉인/봉인해제/재봉인 시 보관/분석 담당자 기록유지
- 사건 관계자 입회 하에 반출입 기록유지
- CCTV 보관
개발보안(보안약점) (IT Compliance)
입력 데이터 검증 및 표현
- SQL Injection
- 경로 조작 및 자원 삽입
- XSS
- 운영체제 명령 삽입
- 위험한 형식 파일 업로드
- CSRF
- HTTP 분할 응답
- 메모리 버퍼 오버플로우
- 포맷 스트링 삽입
보안기능
- 취약한 암호화 알고리즘 사용
- 중요정보 평문 전송
- 하드코드 된 비밀번호
- 적절하지 않은 난수 값 사용
- 취약한 비밀번호 허용
- 솔트 없이 일방향 해시
시간 및 상태
- 경쟁조건
- 제어문을 사용하지 않는 재귀함수
에러처리
- 오류 메시지를 통한 정보 노출
- 오류상황 대응 부재
- 적절하지 않은 예외 처리
코드오류
- Null 포인터 역참조
- 부적절한 자원 해제
- 해제된 자원 사용
- 초기화 되지 않은 변수 사용
캡슐화
- 잘못된 세션에 의한 데이터 정보 노출
- 제거되지 않고 남은 디버그 코드
- 시스템 데이터 정보 노출
- Public 메소드부터 반환된 Private 배열 등
API 오용
- DNS Lookup에 의존한 보안 결정
- 취약한 API 사용
댓글남기기