IgnatiusHeo

구현단계 보안약점 제거 기준-주석문 안에 포함된 시스템 주요정보 본문

자격/SW보안약점진단원

구현단계 보안약점 제거 기준-주석문 안에 포함된 시스템 주요정보

Ignatius Heo 2023. 7. 6. 13:21

작성일: 230706

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(386~389p)

구분 - 보안기능
설계단계 - 암호키 관리
https://cryptocurrencyclub.tistory.com/104
개요 비밀번호를 주석문에 넣어두면 시스템 보안이 훼손될 수 있다. 소프트웨어 개발자가 편의를 위해서
주석문에 비밀번호를 적어둔 경우, 소프트웨어가 완성된 후에는 제거하는 것이 어렵게 된다. 또한,
공격자가 소스코드에 접근할 수 있다면,아주 쉽게 시스템에 침입할 수 있다.
진단 세부사항
(설계단계)
 ① DB데이터 암호화에 사용되는 암호키는 KISA의 암호이용안내서에 정의하고 있는 방법을 적용해야 한다.
  ㅇ  설정파일에 저장되는 중요정보가 암호화되어 저장되도록 설계되어 있는지 확인
  ㅇ  설정파일에 저장된 중요정보의 암복호화에 사용되는 키는 설정파일과 별도의 위치에 저장되도록 설계 여부 확인
  ㅇ  암호키를 안전하게 관리하기 위한 암호키 관리수준의 정의 여부 확인
  ㅇ  암호키 생성 및 변경방법을 수립하고 암호키 백업정책의 정의 여부 확인
  ㅇ  암호키 사용기간을 정의하고 사용기간 경과 시 대응 방법을 정의하고 있는지 확인
      - 대칭키: 송신자2년, (송신자 사용기간 +3년) 이내
      - 비대칭키: 암호화 공개키 2년, 개인키 2년, 검증용 공개키 1~3년, 서명용 개인키 키 크기 별 상이
  ㅇ  암호키 사용 시 사용 종료 후 메모리를 0으로 초기화하도록 코딩 규칙의 정의 여부 확인
 
 ② 중요기능에 대한 접근통제 정책을 수립하여 적용해야 한다. 중요기능에 대한 접근통제가 설계되어 있는지 확인한다.
  ㅇ  설정파일에 저장되는 중요정보가 암호화되어 저장되도록 설계되어 있는지 확인
  ㅇ  설정파일에 저장된 중요정보의 암복호화에 사용되는 키는 설정파일과 별도의 위치에 저장되도록 설계되어 있는지 확인
보안대책
(구현단계)
주석에는 ID, 비밀번호 등 보안과 관련된 내용을 기입하지 않는다.
진단방법
(구현단계)

① DB접속, 관리자 로그인 등이 구현된 코드를 확인하고,

② 주석을 확인하여 암호 포함여부 확인한다

 

다. 코드예제

 

ㅇ 분석

//주석문으로 DB연결 ID, 비밀번호의 중요한 정보를 노출시켜 안전하지 않다.
// DB연결 root / a1q2w3r3f2!@
1: con = DriverManager.getConnection(URL, USER, PASS);

ㅇ 수정

// ID, 비밀번호등의 중요 정보는 주석에 포함해서는 안된다.
1: con = DriverManager.getConnection(URL, USER, PASS);

 


ㅇ 분석

//주석문으로 DB연결 ID, 비밀번호의 중요한 정보를 노출시켜 안전하지 않다.
//DB연결 root / a1q2w3r3f2!@
1: conn = customGetConnection(USER, PASS);

ㅇ 수정

// ID, 비밀번호등의 중요 정보는 주석에 포함해서는 안된다.
1: conn = customGetConnection(USER, PASS);

 

 


ㅇ 분석

/* password is "admin" */
/* passwd is "admin" */
1: int verfiyAuth(char *ipasswd, char *orgpasswd){
2: char *admin = "admin";
3: if(strncmp(ipasswd, oprgpasswd, sizeof(ipasswd)) != 0){
4: printf("Authentication Fail!\n");
5: }
6: return admin;

ㅇ 수정

1: int verfiyAuth(char *ipasswd, char *orgpasswd){
2: char *admin = "admin";
3: if(strncmp(ipasswd, oprgpasswd, sizeof(ipasswd)) != 0){
4: printf("Authentication Fail!\n");
5: }
6: return admin;
7: }

 

 

 

 

 

끝.