일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 자가격리
- 재택치료
- 플러터
- 수제비 2022
- AWS
- 수제비2022 정리
- N-Queen
- CRUDS
- 대외활동
- 뽀모도로 타이머
- FLUTTER
- 정보처리기사2022
- 다음에 또 만나자
- 다들 안잊어서
- 얘들아 잘 지내니
- 지독한 컨셉충
- 2022 정보처리기사
- 교수님 과제 이제 그만..
- 레이튼 교수와 이상한 마을
- 스프링 MVC
- 모바일 청첩장
- 다행이야...ㅎ
- 개강해짐
- 확진
- 생일축하해 나 자신
- 아싸의 생일
- 대학생
- 교육봉사
- 정보처리기사 2022
- pem키 분실
- Today
- Total
Rei’s Tech diary
Chapter 3. 소프트웨어 개발 보안 구축 본문
[1] 소프트웨어 개발 보안 설계
#. SW 개발 보안의 3대 요소 (기무가)
3대 요소 | 설명 |
기밀성 (Confidentiality) |
인가되지 않은 개인 혹은 시스템 접근에 따른 정보 공개 및 노출을 차단하는 특성 |
무결성 (Integrity) |
정당한 방법을 따르지 않고선 데이터가 변경될 수 없으며, 데이터의 정확성 및 완전성과 고의/악의로 변경되거나 훼손 또는 파괴되지 않음을 보장하는 특성 |
가용성 (Availability) |
권한을 가진 사용자나 애플리케이션이 원하는 서비스를 지속 사용할 수 있도록 보장하는 특성 |
#. SW 개발 보안 용오
- 자산(Assets) : 조직의 데이터 또는 조직의 소유자가 가치를 부여한 대상
- 위협(Threat) : 조직이나 기업의 자산에 악영향을 끼칠 수 있는 사건이나 행위
- 취약점(Vulnerability) : 위협이 발생하기 위한 사전 조건으로 시스템의 정보 보증을 낮추는 데 사용되는 약점
- 위험(Risk) : 위협이 취약점을 이용하여 조직의 자산 손실 피해를 가져올 가능성
① 입력 데이터 검증 및 표현 취약점
취약점 | 설명 |
XSS (Cross Site Scripting) |
검증되지 않은 외부 입력 데이터가 포함된 웹페이지가 전송되는 경우, 사용자가 해당 웹페이지를 열람함으로써 웹페이지에 포함된 부적절한 스크립트가 실행되는 공격 |
사이트 간 요청 위조 (CSRF) |
사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격 |
SQL 삽입 | 응용 프로그램의 보안 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행시켜서 데이터베이스(DB)의 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격기법 |
② XSS
공격 유형 | 설명 |
Stored XSS | 방문자들이 악성 스크립트가 포함된 페이지를 읽어 봄과 동시에 악성 스크립트가 브라우저에서 실행되면서 감염되는 기법 |
Reflected XSS | 공격용 악성 URL을 생성한 후 이메일로 사용자에게 전송하면 사용자가 URL 클릭 시 즉시 공격 스크립트가 피해자로 반사되어 접속 사이트에 민감정보를 공격자에게 전송하는 기법 |
DOM XSS (DOM; Document Object Model) |
공격자는 DOM 기반 XSS취약점이 있는 브라우저를 대상으로 조작된 URL을 이메일을 통해 발송하고 피해자가 URL 클릭 시 공격 피해를 당하는 기법 |
③ SQL 삽입
공격 유형 | 설명 |
From SQL Injection |
HTML From 기반 인증을 담당하는 애플리케이션의 취약점이 있는 경우 사용자 인증을 위한 쿼리 문의 조건을 임의로 조작하여 인증을 우회하는 기법 |
Union SQL Injection |
union select 쿼리를 이용하여 한 쿼리의 결과를 다른 쿼리의 결과에 결합하여 공격하는 기법 |
Stored Procedure SQL Injection |
저장 프로시저를 이용하여 공격하는 기법 |
Mass SQL Injection |
기존 SQL Injection의 확장된 개념으로 한 번의 공격으로 대량의 DB 값이 변조되어 홈페이지에 치명적인 영향을 미치는 공격기법 |
Error-Based SQL Injection |
DB 쿼리에 대한 에러값을 기반으로 한 단계씩 점진적으로 DB 정보를 획득할 수 있는 공격기법 |
Blind SQL Injection |
DB 쿼리에 대한 오류 메시지를 반환하지 않으면 공격을 할 수 없는 Error-Based SQL Injection 과 달리 오류 메시지가 아닌 쿼리 결과의 참과 거짓을 통해 의도하지 않은 SQL 문을 실행함으로써 데이터베이스를 비정상적으로 공격하는 기법 |
④ CSRF
#. CSRF 공격방식
1. 공격자는 CSRF 스크립트가 포함된 게시물을 등록
2. 사용자는 CSRF 스크립트가 포함된 페이지의 게시물 열람 요청
3. 게시물을 읽은 사용자의 권한으로 공격자가 원하는 요청 발생
4. 공격자가 원하는 CSRF 스크립트 결과가 발생
[2] 소프트웨어 개발 보안 구현
#. 암호 알고리즘(Encryption Algorithm)
- 암호 알고리즘은 데이터의 무결성 및 기밀성 확보를 위해 정보를 쉽게 해독할 수 없느는 형태로 변환하는 기법
▼ 알고리즘 관련 주요 용어
용어 | 설명 |
평문 (Plain / Plaitext) | 암호화되기 전의 원본 메시지 |
암호문 (Cipher / Ciphertext) | 암호화가 적용된 메시지 |
암호화 (=Encrypt / Encryption / Encoding) | 평문을 암호문으로 바꾸는 작업 |
복호화 (= Decrypt / Decryption / Decoding) | 암호문을 평문으로 바꾸는 작업 |
키 (Key) | 적절한 암호화를 위하여 사용하는 값 |
치환 암호(대치 암호, Substitution Cipher) |
비트, 문자 또는 문자의 블록을 다른 비트, 문자 또는 블록으로 대체하는 방법 |
전치 암호 (Transposition Cipher) |
비트, 문자 또는 블록이 원래 의미를 감추도록 자리바꿈 등을 이용하여 재배열하는 방법 |
#. 암호 알고리즘 방식 ★
- 암호 알고리즘 방식은 양방향인 대칭 키 암호 방식과 비대칭 암호 방식이 있고, 일방향 해시함수 방식인 MDC, MAC가 있다.
① 양방향 방식
㉮ 대칭 키 암호 방식
- 대칭 키 암호 방식은 암호화 알고리즘의 한 종류로, 암호화와 복호화에 닽은 암호 키를 쓰는 알고리즘이다.
- 대칭 키는 블록 암호화와 스트림 암호화 알고리즘으로 나뉜다.
▼ 대칭 키 암호 방식
방식 | 설명 |
블록 암호 방식 | ˙긴 평문을 암호화하기 위해 고정 길이의 블록을 암호화하는 블록 암호 알고리즘을 반복하는 방법 예) DES, AES, SEED |
스트림 암호 방식 | ˙매우 긴 부기의 난수열을 발생시켜 평문과 더불어 암호문을 생성하는 방식 ˙비트/바이트/단어들을 순차적으로 암호화 예) RC4 |
㉯ 비대칭 키 암호 방식 (=공개키 암호 방식)
- 비대칭 키 암호 방식은 사전에 비밀키를 나눠 가지지 않은 사용자들이 안전하게 통신하는 방식이다.
- 비대칭 키 암호 방식에는 공개키(Public Key)와 개인 키(Private Key)가 존재하며, 공개키는 누구나 알 수 있지만, 그에 대응하는 개인키는 키의 소유자만이 알 수 있어야 한다. (공개키는 보안 타협 없이 공개적으로 배포가 가능하다.)
- 공개키로 암호화된 메시지는 반드시 개인 키로 복호화해야 한다.
- 예) RSA, ECC, Elgamal, 디피-헬만 등
㉰ 대칭 키 암호 방식 및 비대칭 키 암호 방식 비교
▼ 암호 알고리즘 비교 ★
구분 | 대칭 키 암호 방식 | 비대칭 키 암호 방식 |
키 | 대칭 키(비밀키) | 비대칭 키(공개키, 사설키) |
키의 관계 | 암호화 키 = 복호화 키 | 암호화 키 \neq 복호화 키 |
키 개수 | \frac{n(n-1)}{2} | 2n |
암호 알고리즘 | 공개 | 공개 |
장점 | 계산 속도 빠름 | 암호화 키 사전 공유 불필요 관리해야 할 키 개수가 적음 |
단점 | 키 분배 및 관리의 어려움 기밀성만 보장 |
계산속도 느림 |
알고리즘 | DES, AES, SEED | 디피-헬만, RSA |
② 일방향 암호 방식(해시 암호 방식)
- 일방향 암호 방식은 임의 길이의 정보를 입력받아, 고정된 길이의 암호문을 출력하는 암호 방식이다.
- 해시 암호화 알고리즘이 적용된 정보는 복호화가 불가능하다.
- 예) MAC, MDC
▼ 일방향 암호 종류
종류 | 설명 |
MAC | MAC는 키를 사용하는 메시지 인증 코드로 메시지의 무결성과 송신자의 인증 보장 |
MDC | MDC는 키를 사용하지 않는 변경 감지 코드로 메시지의 무결성 보장 |
- 해시 함수의 경우 레인보우 테이블 공격에 취약할 수 있다.
- 취약점을 극복하기 위해서 솔트 키를 추가하는 방법과 키 스트레칭 방법이 사용된다.
▼ 해시 함수 취약점 대응 방법
방법 | 설명 |
솔트(Salt) 키 | 시스템에 저장되는 패스워드들은 Hash 또는 암호화 알고리즘의 결괏값으로 저장되는데 솔트 키는 암호공격을 막기 위해 똑같은 패스워드들이 다른 암호 값으로 저장되도록 추가되는 임의의 문자열 |
키 스트레칭 (Key Stretching) |
해시값을 알아보지 못하도록 하기 위해서 원문의 해시값을 입력값으로, 다시 그 해시값을 다시 입력값으로 n번 반복해서 적용하는 방법 |
① 대칭키 암호화 알고리즘
종류 | 설명 |
DES | ˙1975년 미국의 연방 표준국에서 발표한 대칭 키 기반의 블록 암호화 알고리즘 ˙ 블록 크기는 64bit 키 길이는 56 bit인 페이스텔 구조 ˙ DES를 3번 적용하여 보안을 더욱 강화한 3DES도 활용됨 |
SEED | ˙ 1999년 한국인터넷진흥원이 개발한 블록 암호화 알고리즘 ˙ 128비트 비밀키로부터 생성괸 16개의 64비트 라운드 키를 사용하여 총 16회의 라운드를 거쳐 128비트의 평문 블록을 128비트 암호문 블록으로 암호화하려 출력하는 방식 ˙블록크기는128비트이며, 키 길이에 따라 128비트, 256비트로 분류 |
AES | ˙ 2001년 미국 표준 기술 연구소(NIST)에서 발표한 대칭 키 기반의 블록 암호화 알고리즘 ˙ DES의 개인 키에 대한 전사적 공격이 가능해지고, 3 DES의 성능문제를 극복하기 위해 개발 ˙ 블록 크기는 128비트이며, 키 길이에 따라 128 비트, 192비트, 256비트로 분류 ˙ AES의 라운드 수는 10, 12, 14 라운드로 분류, 한 라운드는 4가지 계층으로 구성 |
ARIA | ˙ 2004년 국가정보원과 산학연구협회가 개발한 블록 암호화 알고리즘 ˙ ARIA는 학계, 연구기관, 정부의 영문 앞글자로 구성 ˙ 블록 크기는 128비트이며, 키 길이에 따라 128비트, 192비트, 256비트로 분류 ˙ ARIA는 경량 및 하드웨어에서 효율성 향상을 위해 개발되었으며, ARIA가 사용하는 대부분의 연산은 XOR과 같은 단순한 바이트 단위 연산으로 구성 |
IDEA | ˙ DES를 대체하기 위해 스위스 연방기술 기관에서 개발한 블록 암호화 알고리즘 ˙ 128비트의 키를 사용하여 64비트의 평문을 8라운드에 거쳐 64비트의 암호문을 만듦 |
LFSR | ˙ 선형 되먹임 시프트 레지스터는 시프트 레지스터의 일종으로, 레지스터에 입력되는 값이 이전 상태 값들의 선형 함수로 계산되는 구조로 되어 있는 스트림 암호화 알고리즘 |
② 비대칭 키 암호화 알고리즘
종류 | 설명 |
디피-헬만 (Diffie-Hellman) |
˙ 최초의 공개키 알고리즘으로 W.DIFFIE와 M.HELLman이 1976년에 고안한 알고리즘으로 유한 필드 애네서 이산대수의 계산이 어려운 문제를 기본 원리로 하고 있음 ˙ Diffie-Hellman은 공개키 암호 방식의 개념을 이용하여 두 사용자 간에 공통의 암호화 키를 안전하게 공유할 방법을 제시하였으며, 많은 키 분배 방식에 관한 연구의 기본이 됨 |
RSA | ˙ 1977년 3명의 MIT 수학 교수가 고안한 큰 인수의 곱을 소인수 분해하는 수학적 알고리즘 이용하는 공개키 암호화 알고리즘 ˙ 비대칭 암호화 방식으로 소수를 활용한 암호화 알고리즘 |
ECC | ˙ 유한체 위에서 정의된 타원곡선 군에서 이산대수 문제에 기초한 공개키 암호화 알고리즘 ˙ 1985년 코블리치와 밀러가 RSA 암호 방식에 대한 대안으로 처음 제안 ˙ PKI 기반의 RSA의 문제점인 속도와 안전성 해결하기 위해 타원 기반 구조체의 안정성 효율성을 기반으로 생성되었고, RSA보다 키의 비트 수를 적게 하면서 동일한 성능을 제공하는 것이 가장 큰 특징 |
ELGamal | ˙ T.ELGamal이 1984년에 제안한 공개키 알고리즘 ˙ 이산대수의 계산이 어려운 문제를 기본 원리로 하고 있으며, RSA와 유사하게 전자서명과 데이터 암복호화에 함께 사용 가능 |
DSA | ˙ 1991년 8월에 NIST가 미국 전자서명 표준에서 사용하기 위하여 발표한 정부용 전자서명 알고리즘 ˙ 안전성은 이산대수 문제의 어려움에 기반하고 있음 |
③ 해시 암호화 알고리즘
종류 | 설명 |
MD5 | ˙ 1991년 R.rivest가 MD4를 개선한 암호화 알고리즘으로 프로그램이나 파일의 무결성 검사에 사용하는 해시 알고리즘 ˙ 각각의 512비트짜리 입력 메시지 블록에 대해 차례로 동작하여 128비트의 해시값을 생성하는 해시 알고리즘 |
SHA-1 | ˙ 1993년 NSA에서 미 정부 표준으로 지정, DSA에서 사용하는 해시 알고리즘 ˙ 160 비트의 해시값을 생성하는 해시 알고리즘 |
SHA-256/384/512 | ˙ SHA 알고리즘의 한 종류로서 256비트의 해시값을 생성하는 해시 함수 ˙ AES의 키 길이인 128, 192, 256 비트에 대응하도록 출력 길이를 늘인 해시 알고리즘 |
HAS-160 | ˙ 국내 표준 서명 알고리즘 KCDSA를 위하여 개발된 해시 함수 ˙ MD5와 SHA1의 장점을 취하여 개발된 해시 알고리즘 |
HAVAL | ˙ 메시지를 1024bit 블록으로 나누고, 128, 160, 192, 224, 256 비트인 메시지 다이제스트를 출력하는 해시 알고리즘 |
#. 코드 오류 취약점
- 널 포인터 역참조
- 정수를 문자로 변환
- 부적절한 자원 해제
- 초기화되지 않은 변수 사용
#. 캡슐화
- 캡슐화는 외부에 은닉이 필요한 중요한 데이터와 필요한 기능성을 불충분하게 캡슐화했을 때 인가되지 않은 사용자에게 데이터 유출, 권한 문제 등이 발생할 수 있는 보안 취약점 예방을 위한 보안 검증 항목들이다.
#. 캡슐화 취약점
- 잘못된 세션에 의한 데이터 정보 노출
- 제거되지 않고 남은 디버그 코드
- 민감한 데이터를 가진 내부 클래스 사용
- 시스템 데이터 정보 노출
#. API 오용 취약점
- DNS Lookup에 의존한 보안 결정
- 위험하다고 알려진 함수 사용
- 널(Null) 매개변수 미검사
'정보처리기사 > [5] 정보시스템 구축관리' 카테고리의 다른 글
Chapter 4. 시스템 보안 구축 (0) | 2022.04.04 |
---|---|
Chapter 2. IT프로젝트 정보시스템 구축관리 (0) | 2022.03.30 |
Chapter 1. 소프트웨어 개발방법론 활용 (0) | 2022.03.29 |