본문 바로가기
소프트웨어(SW) 보안약점 진단원/구현단계 보안약점 제거 기준

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

by 브루노W 2025. 6. 3.
유형 보안기능
보안약점 주석문 안에 포함된 시스템 주요정보
개요
비밀번호를 주석문에 넣어두면 시스템 보안이 훼손될 수 있다. 소프트웨어 개발자가 편의를 위해서 주석문에 비밀번호를 적어둔 경우, 소프트웨어가 완성된 후에는 제거하는 것이 어렵게 된다.
 
또한, 공격자가 소스코드에 접근할 수 있다면,아주 쉽게 시스템에 침입할 수 있다.
보안대책
주석에는 ID, 비밀번호 등 보안과 관련된 내용을 기입하지 않는다.
진단방법
DB접속, 관리자 로그인 등이 구현된 코드를 확인하고, 주석을 확인하여 암호 포함 여부 확인한다.
연관된 설계단계 기준 암호키 관리

 

코드예제

 

● 안전하지 않은 코드 예 (Java)

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

 

● 안전한 코드 예 (Java)

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

 

 

● 안전하지 않은 코드 예 (C#)

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

 

● 안전한 코드 예 (C#)

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

 

 

● 안전하지 않은 코드 예 (C)

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

 

● 안전한 코드 예 (C)

int verfiyAuth(char *ipasswd, char *orgpasswd) {
    char *admin = "admin";
    if(strncmp(ipasswd, oprgpasswd, sizeof(ipasswd)) != 0) {
    	printf("Authentication Fail!\n");
    }
    return admin;
}

 

 

진단방법
 
DB접속, 관리자 로그인 등이 구현된 코드를 확인하고(①), 주석을 확인하여 암호 포함 여부 확인한다(②).

 

 

● 일반적인 진단의 예

…/*
* Password for administrator is "tiger." ·············································②
*/
public Connection DBConnect(String id, String password) {
    String url = "DBServer";
    Connection conn = null;
    try {
        String CONNECT_STRING = url + ":" + id + ":" + password;
        InitialContext ctx = new InitialContext();
        DataSource datasource = (DataSource) ctx.lookup(CONNECT_STRING); ·············①
        conn = datasource.getConnection();
    } catch (SQLException e) {
    	System.err.printf("….");
    }
    …
}

 


● 정탐코드

public void daoTest() throws Exception {
    // db sample : 84d5d0a08a3ec5e2d91a
    // 암호화 전, 후 : 1365ADMIN_01, aa84c40031d808196537ad3dcf81f9af
    String pwd= "46c165a343fd6841273ae04655af24dd";
    String pwd1= ARIAEngine.decARIA(pwd);
    System.out.println(pwd1);
}

주석문 안에 개발자의 이해를 돕기 위한 목적 등으로 비밀번호를 적어 놓고 있으므로 취약하다고 판정한다.

 

 

● 오탐코드

// 암호화
String Sid = getSessionValue(session, "ihidnum");
Sid = AEScryptWithSaltKey.encode(StrTool.sNN(Sid));
String sIhidnum = Sid;