소스코드 보안약점 진단 // 소프트웨어 보안약점 진단 // SW 보안약점 진단과 같이 다양한 이름으로 불리는 진단 과업 중 하나이다.
SW개발보안은 해킹 등 사이버공격의 원인인 보안약점을 SW개발단계에서 사전에 제거하고 SW 개발 생명주기의 각 단계별로 수행하는 일련의 보안활동을 통하여 안전한 SW를 개발·운영하기 위한 목적으로 적용하는 개발체계이다.
해당 내용은 KISA에서 발간하는 취약점 진단 가이드 항목을 기준으로 작성한다.
제2절 보안기능
보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현시 발생할 수 있는 보안 약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다.
13. 주석문 안에 포함된 시스템 주요정보
가. 개요
패스워드를 주석문에 넣어두면 시스템 보안이 훼손될 수 있다. 소프트웨어 개발자가 편의를 위해서 주석문에 패스워드를 적어둔 경우, 소프트웨어가 완성된 후에는 제거하는 것이 어렵게 된다. 또한, 공격자가 소스코드에 접근할 수 있다면,아주 쉽게 시스템에 침입할 수 있다.
나. 보안대책
주석에는 ID, 패스워드 등 보안과 관련된 내용을 기입하지 않는다.
다. 코드예제
다음 예제는 개발자의 이해를 돕기 위한 목적 등 편리성을 위해 비밀번호를 주석문 안에 서술하고 제대로 지우지 않아서 보안약점이 발생한 경우이다.
- 안전하지 않은 코드의 예 JAVA -
//주석문을 통해 DB연결 ID, 패스워드의 중요한 정보를 노출시켜 안전하지 않다.
// DB연결 root / a1q2w3r3f2!@
1: con = DriverManager.getConnection(URL, USER, PASS);
- 안전한 코드의 예 JAVA -
프로그램 개발 시에 주석문 등에 남겨놓은 사용자 계정이나 패스워드 등의 정보는 개발 완료 시에 확실 하게 삭제하여야 한다.
// ID, 패스워드등의 중요 정보는 주석에 포함해서는 안된다.
1: con = DriverManager.getConnection(URL, USER, PASS);
라. 진단방법
DB접속, 관리자 로그인 등이 구현된 코드를 확인하고(①), 주석을 확인하여 암호 포함여부 확인한 다(②).
1: …/*
2: * Password for administrator is “tiger.” ②
3: */
4: public Connection DBConnect(String id, String password) {
5: String url = “DBServer”;
6: Connection conn = null;
7: try {
8: String CONNECT_STRING = url + “:” + id + “:” + password;
9: InitialContext ctx = new InitialContext();
10: DataSource datasource = (DataSource) ctx.lookup(CONNECT_STRING);---①
11: conn = datasource.getConnection();
12: } catch (SQLException e) {
13: System.err.printf(“….”);
14: }
15: …
16: }
- 정탐코드의 예 -
다음의 예제에서는 주석문 안에 개발자의 이해를 돕기 위한 목적 등으로 패스워드를 적어 놓고 있으 므로 취약하다고 판정한다.
1: public void daoTest() throws Exception {
2: // db sample : 84d5d0a08a3ec5e2d91a
3: // 암호화 전, 후 : 1365ADMIN_01, aa84c40031d808196537ad3dcf81f9af
4: String pwd= “46c165a343fd6841273ae04655af24dd”;
5: String pwd1 = ARIAEngine.decARIA(pwd);
6: System.out.println(pwd1);
7: }
- 정탐코드의 예 -
주석문안에 “password”, “passwd”, “비밀번호”등의 텍스트가 존재하지만 실제로 그 내용이 비밀 번호가 아닌 경우에는 취약하지 않다고 판정한다.
1: // 암호화
2: String Sid = getSessionValue(session, “ihidnum”);
3: Sid = AEScryptWithSaltKey.encode(StrTool.sNN(Sid));
4: String sIhidnum = Sid
'보안 공부 > 소스코드 보안약점 진단' 카테고리의 다른 글
소스코드 보안약점 진단 - 무결성 검사 없는 코드 다운로드 (0) | 2022.01.20 |
---|---|
소스코드 보안약점 진단 - 솔트 없이 일방향 해시함수 사용 (0) | 2022.01.19 |
소스코드 보안약점 진단 - 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출 (0) | 2022.01.17 |
소스코드 보안약점 진단 - 취약한 비밀번호 허용 (0) | 2022.01.14 |
소스코드 보안약점 진단 - 적절하지 않은 난수값 사용 (0) | 2022.01.12 |