소프트웨어 개발보안 가이드 분석(2021) : 주석문 안에 포함된 시스템 주요정보

패스워드를 주석문에 넣어두면 시스템 보안이 훼손될 수 있다.

소프트웨어 개발자가 편의를 위해서 주석문에 패스워드를 적어둔 경우, 소프트웨어가 완성된 후에는 그것을 제거하는 것이 매우 어렵게 된다.

또한, 공격자가 소스코드에 접근할 수 있다면, 아주 쉽게 시스템에 침입할 수 있다.

소프트웨어 개발보안가이드(2021), 한국인터넷진흥원

 

주석문 안에 포함된 시스템 주요정보란?

소프트웨어 개발은 혼자서 하는 것이 아닌 여러 명의 개발자들이 모여서 개발됩니다. 여러 명의 개발자들이 개발을 하기 때문에 다른 개발자들에게 공유 혹은 정보 제공을 위해 주석문을 많이 작성합니다.

이러한 과정에서 개발 당시의 편의성을 위해 주석문 안에 보안 측면으로 볼 때 중요한 시스템 정보인 시스템의 아키텍처, 구성 요소, 데이터 흐름, 접근 권한, 패스워드 등이 들어갈 수 있어 공격자가 소스코드에 접근할 수 있다면 모두 노출될 수 있는 보안약점입니다.

 

공격 메커니즘

  1. 정보 수집 : 소프트웨어나 애플리케이션의 소스 코드를 분석하고, 주석문에 포함된 시스템 주요정보를 탐색합니다.
  2. 취약점 분석 : 주석문 안에 포함된 시스템 주요정보를 분석하여 취약점을 찾습니다. 이 단계에서는 시스템의 보안 취약점을 이용할 수 있는 방법을 탐색하고, 공격에 활용할 수 있는 잠재적인 취약점을 식별합니다.
  3. 공격 수행 : 수집한 정보를 바탕으로 시스템에 공격을 실행합니다.
  • 웹 소스의 경우 브라우저에서 제공하는 "개발자 도구"를 통해 누구나 소스코드를 확인할 수 있습니다. 만일 개발 과정에서 중요한 정보를 주석문에 포함 시켰다면 누구나 해당 정보를 확인할 수 있는 것입니다.
  • 이번 포스팅에서 이야기하고 있는 해당 취약점에 대한 대응은 주석문 안에 중요정보를 포함시키지 않는 방법만 존재합니다. 그렇기 때문에 개발이 완료 시에는 불필요한 주석문들을 모두 삭제하는 작업이 필요합니다.

 

취약한 웹 애플리케이션의 예

   public static void main(String[] args) {
  1    // DB_USER : root, DB_PASSWORD : Administrator
       Connection connection = null;        
                connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
   }
  • 1 : DB_USER와 DB_PASSWORD가 모두 주석문안에 포함되어 노출됩니다.
  • 위의 코드와 같이 주석문안에 주요정보가 있을 경우 공격자가 소스코드에 접근할 수만 있다면 DB에 접속할 수 있습니다. 그러므로 불필요한 주석문의 경우 모두 제거를 해줍니다.

 

시큐어코딩 적용 방법

   public static void main(String[] args) {
       Connection connection = null;        
                connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
   }
  • 불필요한 주석문을 모두 제거해야 공격자에게 정보를 제공하지 않아 안전한 보안 환경을 구성할 수 있습니다.

  • 이전 소프트웨어 개발보안 가이드 분석(2021) : 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출
  • 다음 소프트웨어 개발보안 가이드 분석(2021) : 솔트 없이 일방향 해시함수 사용