일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 말 인용
- 국립과천과학관
- 해결 방안
- 미래 사회의 단위
- 절차적 사고의 장점
- 공부정리
- 처리
- 기계어
- 운영체제 서비스
- 패킷트레이서 이용
- 운영체제의 기능 1. 자원 관리 기능 2. 시스템 보호 3. 네트워크(통신 기능)
- 뿌..
- 겁나 많아
- 절차적 사고
- 반복 구조 찾기
- 운영체제 목적
- gensim 3.7.3 설치 오류
- 순서도
- 장치에 할당할 수 없는 NET ID Broadcast주소
- 운영체제의 미래
- 딥러닝
- 소프트웨어
- 운영체제의 발달 과정
- 소프트웨어 시대
- 컴퓨터
- 앨런 튜링
- 출력
- 선택
- 레지스터
- 프로그래밍
- Today
- Total
hye-_
5. SW 개발보안 - 77. 시큐어코딩 가이드 본문
77. 시큐어코딩 가이드
1. SQL Injection
2. 자원삽입
3. 하드코드된 비밀번호
시큐어코딩 가이드
OWASP (The Open Web Application Security Project)에서
시큐어코딩 가이드
1. 입력 데이터 검증 및 표현의 개념
프로그램에 입력되는 데이터로 인해 여러 가지 보안 약점이 발생할 수 있다.
- 이러한 보안 약점을 방지하기 위한 보안 점검 항목들이다.
- 대부분 입력과 입력된 값에 대해서 정상적으로 점검을 하냐 안하냐에 대한 내용이 나온다.
입력 데이터 검증 및 표현 - 보안 약점의 종류
운영체제 명령어 삽입, 위험한 형식 파일 업로드, 신뢰되지 않는 URL 주소로 자동 접속 연결된다.
보안 약점의 종류 | |
SQL injection SQL 주입 ![]() |
● 검증되지 않은 외부 입력값 SQL 쿼리문에 삽입되어 공격할 수 있는 보안 약점이다. ● DB에 컴파일된 SQL 쿼리문을 전달함으로써 방지할 수 있다. 즉, ID와 PW에 들어가야 할 부분에 해커가 SQL코드식을 넣음으로써 DB안쪽에 있는 비밀번호나 유저 사용자 이름을 바깥으로 인출할 수 있다. ● SQL Injection 취약점이 발생하는 곳은 주로 웹 애플리케이션과 데이터베이스가 연동되는 부분이다. ● 로그인과 같이 웹에서 사용자의 입력값을 받아 데이터베이스 SQL문으로 데이터를 요청하는 경우 SQL injection을 수행할 수 있다. 그래서 SQL injection을 보안해야된다. 시큐어가이드를 보면 어떻게 막는지에 대한 소스코드까지 다 있다. 예 ) 1. 인터넷 게시판에 글을 쓰는데 SQL을 작성하는 것이다. 2. 로그인창에 SQL을 넣는것이다. 그러나 사실 로그인창 안에도 SQL을 이용해서 아이디 패스워드를 체크할 수 있는 기능들이 들어있다. 거기에다가 SQL을 넣음으로 인해서 아이디와 패스워드를 탈취할 수있다. 즉, 내가 입력하는 항목 폼에다가 엽력을 해서 문제를 발생시킨다. 이것을 SQL injection이라고 한다. |
경로 조작 및 자원 삽입 | 검증되지 않은 외부 입력값이 시스템 자원 접근 경로를 조작하거나 시스템 자원에 삽입되어 공격할 수 있는 보안 약점이다. |
크로스 사이트 스크립트 (XSS Cross Site Scripting) ![]() |
● 게시판의 글에 원본과 함께 악성 코드를 삽입하여 글을 읽으면 악성코드가 실행되도록 하여 클라이언트의 정보를 유출하는 공격 방법이다. ● 웹페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도함으로써, 정보 유출 등의 공격을 유발할 수 있는 취약점이다. ● 외부 입력값에 스크립트가 삽입되지 못하도록 문자열 치환 함수를 사용하거나 JSTL이나 크로스사이트 스크립트 방지 라이브러리를 사용함으로써 방지할 수 있다. |
XQuery 삽입 | ● XQuery를 사용하여 XML 데이터에 대한 동적 쿼리 생성 시 검증되지 않은 외부 입력값이 쿼리문 구조 변경에 사용될 수 있는 보안 약점이다. ● XQuery에 사용되는 외부 입력값에 대하여 특수문자 및 쿼리 예약어 필터링을 통해 방지할 수 있다. |
XPth 삽입 | 검증되지 않은 외부 입력값으로 XPath 쿼리문을 생성하여 쿼리문의 의미나 구조가 변경될 수 있는 보안 약점이다. |
LDAP 삽입 | ● 외부 입력값이 올바르게 처리되지 못하여 LDAP(Lightweight Directory Access Protocol) 쿼리문의 구성 변경에 사용될 수 있는 보안 약점이다. ● DN (Distinguished Name)과 필터에 사용되는 외부 입력값에 특수문자를 제거함을써 방지할 수 있다. |
자원 삽입 | ● 외부 입력값을 검증하지 않고 시스템 자원에 대한 식별자로 사용하는 경우 공격자는 입력값 조작을 통해 시스템이 보호하는 자원에 임의로 접근하거나 수정할 수 있다. ● 이런 보안 취약점을 막기위해서 업로드할 수 있는 파일의 형식을 제한한다. 즉, HTML이나 이런파일은 업로드가 안된다. 왜? HTML자체에 악의적인 소프트웨어가 들어있을 수 있기 때문이다. 또는 이미지 중에서도 검증을 한다. JPG중에 악성 코드가 들어있을 수 있다. 근데 이걸 올리면 어디에 올라가냐? 서버 디스크에 저장이 된다. 근데 실제 그림이 아닌것이다. 악성코드가 숨어져있는것이다. 이게 바로 자원 삽입이다. |
시큐어코딩 가이드
2. 보안 기능의 개념
인증, 접근 제어, 기밀성, 암호화, 권한 관리 등의 보안 기능을 부적절하게 구현하여 여러 가지 보안 약점이 발생할 수 있다.
이러한 보안 약점을 방지하기 위한 보안 점검 항목들이다.
보안 기능 - 보안 약점의 종류
보안 약점의 종류 | |
적절한 인증 없는 중요 기능 허용 | ● 적절한 인증 없이 중요 정보를 읽거나 변경할 때 발생하는 보안 약점이다. ● 인증 과정 없이 서버에 접근하지 못하도록 하고 중요 정보는 재인증을 거치도록함으로써 방지할 수 있다. |
부적절한 인가 | ● 접근 가능한 실행 경로에 대한 접근 제어 검사를 완전하게 하지 않아 정보가 유출되는 보안 약점이다. ● 노출되는 실행 경로를 최소화하고 사용자의 권한에 따라 접근 제어 리스트(Access Control List)를 관리함으로써 방지 할 수 있다. |
중요한 자원에 대한 잘못된 권한 설정 | ●보안 또는 설정 파일과 같이 중요한 자원에 대해 읽기나 쓰기 권한을 잘못 설정하여 발생하는 보안 약점이다. ● 중요한 자원은 관리자만 읽고 쓰기가 가능하게 하고 사용자의 권한을 검사함으로써 방지할 수 있다. |
취약한 암호화 알고리즘 사용 | ● 취약하거나 위험한 암호화 알고리즘을 사용하여 패스워드가 유출되는 보안 약점이다. ● 잘 알려진 안전한 암호화 알고리즘을 사용함으로써 방지할 수 있다. |
중요 정보 평문 저장 | ● 개인정보, 금융정보, 패스워드 등의 중요 정보를 암호화하지 않고 평문으로 저장하여 중요 정보가 노출되는 보안 약점이다. ● 중요 정보를 암호화하여 저장하고 중요 정보 접근 시 사용자의 권한을 검사함으로써 방지할 수 있다. |
중요 정보 평문 전송 | ● 중요 정보를 암호화하지 않고 평문으로 전송하여 중요 정보가 노출되는 보안 약점이다. ● 중요 정보를 암호화하여 전송하거나 보안 채널을 사용함으로써 방지할 수 있다. |
하드 코드된 비밀번호 | ● 프로그램 코드 내에 데이터를 직접 입력하는 하드 코드된 패스워드를 포함시켜 사용하여 관리자의 정보가 노출되는 보안 약점이다. 예) 우리가 프로그램 코딩을 하다가 보면 특히 웹개발을 하다가 보면 로그인, 로그아웃 하는 번거로움이 굉장히 많고 또는 DB 커넥션에 관련되어서 DB connection(연결)을 줄때 DBMS에 아이디와 패스워드를 같이 코딩하는 경우가 있다. 그리고 나서 나중에 컴파일이나 납품할 때 지우는 그런 형태가 있는데, 지우지 않는 실수가 굉장히 많다. ● 패스워드는 암호화하여 별도의 파일에 저장하여 사용하고 디폴트 패스워드 대신 사용자 입력 패스워드를 사용함으로써 방지할 수 있다. |
충분하지 않은 키 길이 사용 | ● 길이가 짧은 키로 암호화 및 복호화를 함으로써 짧은 시간 안에 키를 찾아낼 수 있는 보안 약점이다. ● PSA 알고리즘은 2,048비트 이상, 대칭 암호화 알고리즘은 128비트 이상의 키를 사용함으로써 방지할 수 있다. |
적절하지 않은 난수값 사용 | ● 적절하지 않은 난수값을 사용하여 난수가 예측 가능해질 수 있는 보안 약점이다. ● 난수 값을 결정하는 현재 시각 기반 등으로 시드값을 매번 변경함으로써 방지할 수 있다. |
시큐어코딩 가이드
3. 시간 및 상태의 개념
동시 수행을 지원하는 병렬 시스템이나 여러 개의 프로세스가 동작되는 멀티 프로세스 환경에서 시간 및 상태를 부적절하게 사용하여 여러 가지 보안 약점이 발생할 수 있다.
이러한 보안 약점을 방지하기 위한 보안 점검 항목들이다.
시간 및 상태의 개념 - 보안 약점의 종류
보안 약점의 종류 | |
경쟁 조건 : 검사 시점과 사용 시점 (TOCTOU) |
● 자원을 검사하는 시점 (TOC : Time Of Check)과 사용하는 시점(TOU : Time Of Use)이 달라서 발생하는 보안 약점이다. ● 여러 프로세스가 공유 자원 접근 시 동기화 구문으로 한 번에 하나의 프로세스만 접근하게 함으로써 방지할 수 있다. |
종료되지 않는 반복문 또는 재귀함수 | ● 종료 조건이 없는 반복문이나 재귀함수를 사용하여 무한 반복하며 자원 고갈이 발생하는 보안 약점이다. ● 재귀 호출 횟수를 제한함으로써 방지할 수 있다. |
시큐어코딩 가이드
4. 에러 처리의 개념
발생한 에러를 처리하지 않거나 완전하게 처리하지 않아 에러 정보에 중요 정보가 포함되어 여러 가지 보안 약점이 발생할 수 있다.
이러한 보안 약점을 방지하기 위한 보안 점검 항목들이다.
가장 일반적인 에러 처리
ID와 PW가 있다. 예전에는 ID,PW 넣고 엔터 누르면 ID가 잘못되었습니다. 또는 비번이 잘못되었습니다. ID나 PW이 잘못되었습니다. 또는 테스트 과정 중에 ID, PW 넣는 순간 내부의 log파일이 겉으로 표현되었던 경우도 있었다. 내부에 오류가 발생했을 때 뜨는 오류를 서버에 저장을 하는데 그것이 외부에 노출될 수 도 있다. 이게 에러 처리에서의 보안약점이라고 본다.
에러 처리 - 보안 약점의 종류
보안 약점의 종류 | |
에러 메시지를 통한 정보 노출 | 에러 메시지에 실행 환경이나 사용자 관련등 민감한 정보가 포함되어 외부에 노출되는 보안 약점이다. |
에러 상황 대응 부재 | 에러가 발생할 수 있는 에러 상황에 대해 예외 처리를 하지 않아 프로그램이 동작하지 않거나 제대로 동작하지 않는 보안 약점이다. |
부적절한 예외 처리 | 프로그램 수행 중에 함수의 결과값에 대해 적절하게 처리하지 않거나 예외 상황에 대해 조건을 적절하게 검사하지 않아 발생하는 보안 약점이다. |
시큐어코딩 가이드
5. 코드 오류의 개념
개발자가 흔히 실수하는 프로그램 오류들로 인해 여러 가지 보안 약점이 발생할 수 있다.
이러한 보안 약점을 방지하기 위한 보안 점검 항목들이다.
코드 오류 - 보안 약점의 종류
보안 약점의 종류 | |
Null Pointer(널 포인터) 역참조 | 일반적으로 객체가 Null이 될 수 없다는 가정을 위반하여 공격자가 의도적으로 Null Pointer 역참조를 발생시켜 공격에 사용하는 보안 약점이다. |
부적절한 자원 해제 | 오픈 파일 디스크립터, 힙 메모리, 소켓 등의 유한한 자원을 할당받아 사용한 후 프로그램 에러로 반환하지 않아 발생하는 보안 약점이다. |
해제된 자원 사용 | 해제된 자원을 참조하여 의도하지 않은값이나 코드를 실행하게 됨으로써 의도하지 않은 결과가 발생하는 보안 약점이다. |
초기화되지 않은 변수 사용 | 초기화되지 않은 변수를 사용하면 임의의 값이 사용되어 의도하지 않은 결과가 발생하는 보안 약점이다. |
시큐어코딩 가이드
6. 캡슐화의 개념
중요한 데이터나 기능성을 잘못 캡슐화하거나 잘못 사용하면 여러 가지 보안 약점이 발생할 수 있다.
이러한 보안 약점을 방지하기 위한 보안 점검 항목들이다.
캡슐화 - 보안 약점의 종류
보안 약점의 종류 | |
잘못된 세션에 의한 데이터 정보 노출 | ● 다중 스레드 환경에서 정보를 저장하는 멤버 변수가 포함되어 서로 다른 세션에서 데이터를 공유하여 발생하는 보안 약점이다. ● 싱글톤(Singleton) 패턴 사용 시 변수 범위를 제한하여 방지할 수 있다. |
제거되지 않고 남은 디버그 코드 | ● 개발 완료 후에 디버그 코드가 제거되지 않은 채로 배포되어 발생하는 보안 약점이다. ● 소프트웨어가 배포되기 전에 디버그 코드를 삭제해 방지할 수 있다. |
시스템 데이터 정보 노출 | ●시스템, 관리자, DB 정보 등의 시스템 데이터 정보가 공개되어 발생하는 보안 약점이다. ● 예외 상황 발생 시 시스템 메시지 등의 시스템 데이터 정보가 화면에 출력되지 않게 함으로써 방지 할 수 있다. |
public 메소드로부터 반환된 private 배열 | ● private 선언된 배열을 public 선언된 메소드를 통해 반환하여 그 배열의 레퍼런스가 외부에 공개되어 발생하는 보안 약점이다. ● private 선언된 배열을 pubic 선언된 메소드를 통해 반환하지 않게 함으로써 방지할 수 있다. |
private 배열에 public 데이터 할당 | ● public 선언된 메소드의 인자가 private 선언된 배열에 저장되어 그 배열을 외부에서 접근할 수 있게 되는 보안 약점이다. ● public 선언된 메소드의 인자를 private 선언된 배열에 저장되지 않도록 함으로써 방지할 수 있다. |
시큐어코딩 가이드
7. API 오용의 개념
서비스에서 제공되는 사용법에 반하는 방법으로 API를 사용하거나 보안에 취약한 API를 사용하여 여러 가지 보안 약점이 발생할 수 있다.
이러한 보안 약점을 방지하기 위한 보안 점검 항목들이다.
API 오용 - 보안 약점의 종류
보안 약점의 종류 | |
DNS lookup에 의존한 보안 결정 (domain name server) |
● 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 하면 공격자가 DNS 엔트리를 속여 동일 도메인에 속한 서버인 것처럼 위장하는 보안 약점이다. ● 보안 결정 시 도메인명을 이용한 DNS lookup에 의존하지 않도록 함으로써 방지할 수 있다. |
취약한 API 사용 | ● 보안 문제로 금지된 함수 또는 오용될 가능성이 있는 API 등의 취약한 API를 사용하여 발생하는 보안 약점이다. ● 보안 문제로 금지된 함수는 안전한 대체 함수를 사용함으로써 방지할 수 있다. |
문제 풀이
1. 데이터베이스와 연동된 웹 애플리케이션에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 탈취하거나 조작할 수 있는 보안 약점은?
SQL injection
2. 다음 JAVA 코드에서 밑줄로 표시된 부분에는 어떤 보안 약점이 존재하는가? (단, Key는 암호화 키를 저장하는 변수이다.)
import javax.crypto.keyGenerator; import javax.crypto.sepc.SecretkeySpec; import javax.crypto.Cipher; -----생략 public String encriptString(String usr){ String key = "22df3023st~2;asn!@#/?as"; if (key != null){ byte[] bToEncrypt = usr.getBytes("UTF-8"); ...생략 |
하드 코드된 암호화 키 사용
3. 웹 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도함으로써, 정보 유출 등의 공격을 유발할 수 있는 취약점은?
① Ransomware
② Pharming
③ Phishing
④ XSS
4
4. Secure 코딩에서 입력 데이터의 보안 약점과 관련한 설명으로 틀린 것은?
① SQL 삽입 : 사용자의 입력값 등 외부 입력값이 SQL 쿼리에 삽입되어 공격
② 크로스사이트 스크립트 : 검증되지 않은 외부 입력값에 의해 브라우저에서 악의적인 코드가 실행
③ 운영체제 명령어 삽입 : 운영체제 명령어 파라미터 입력값이 적절한 사전검증을 거치지 않고 사용되어 공격자가 운영체제 명령어를 조작
④ 자원 삽입 : 사용자가 내부 입력값을 통해 시스템 내에 사용이 불가능한 자원을 지속적으로 입력함으로써 시스템에 과부화 발생
4번 내부가 아닌 외부 입력값이다.
1. 다음과 관련된 보안 취약점은?
- 잘못된 세션에 의한 데이터 정보 노출
- 제거되지 않고 남은 디버그 코드
- 시스템 데이터벙보 노출
- public 메소드로부터 반환된 private 배열
캡슐화
2. 다음 중 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 하면 공격자가 DNS 엔트리를 속여 동일 도메인에 속한 서버인 것처럼 위장하는 보안 약점은?
① DNS lookup에 의존한 보안 결정
② 취약한 API 사용
③ public 메소드로부터 반환된 private 배열
④ 종료되지 않는 반복문 또는 재귀 함수
1번
3. 다음 중 코드 오류의 보안 약점이 아닌 것은?
① Null Pointer(널 포인터) 역참조
② 부적절한 인가
③ 해제된 자원 사용
④ 초기화되지 않은 변수 사용
2번
4. 다음 중 에러 처리 보안 약점의 종류가 아닌 것은?
① 에러 메시지를 통한 정보 노출
② 에러 상황 대응 부재
③ 부적절한 예외 처리
④ 검사 시점과 사용 시점
4번
5. 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안 약점은?
① 검사 시점과 사용 시점
② 에러 메시지를 통한 정보 노출
③ 에러 상황 대응 부재
④ 취약한 API 사용
1번
'정처기 > 정보시스템 구축관리' 카테고리의 다른 글
7. 공격유형 - 80. 공격유형 (0) | 2023.06.21 |
---|---|
6.암호화 - 79. 암호화 (0) | 2023.06.21 |
5. SW 개발보안 - 78. SW 개발보안 구축 (0) | 2023.06.19 |
5. SW 개발보안 - 76. SW 개발보안 (0) | 2023.06.19 |
4. SW/HW/DB 신기술 - 74. DB 신기술 (0) | 2023.06.19 |