스패로우에서는 애플리케이션 보안 취약점 분석 솔루션을 판매하기도 하지만 SW보안약점진단원 자격증을 보유한 컨설턴트가 진단 컨설팅을 수행하기도 하는데요. 실제 중소기업을 대상으로 애플리케이션 보안 & 품질 시장의 리더로서 소프트웨어의 안전을 책임지는 스패로우의 노하우를 가득 담아 컨설팅을 진행하고 있습니다. 오늘은 이러한 스패로우의 진단 컨설팅 경험을 바탕으로 선정한 중소기업에서 자주 발생하는 주요 취약점 6개와 그 예방법을 설명해 드리고자 합니다.
Top 1, 2 l SQL 삽입, 크로스사이트 스크립팅(XSS)
SQL 삽입, 크로스사이트 스크립팅(XSS)은 웹 애플리케이션 보안에서 매우 중요한 취약점이고 여전히 많이 검출되는 항목입니다. 데이터베이스의 손상, 민감한 정보의 유출, 사용자 세션 하이재킹 등 심각한 보안 문제를 초래할 수 있으며, 공급망 공격을 통해 이러한 취약점을 악용할 수 있는 기회를 제공합니다. 이 두 항목 모두 외부 입력값에 대한 필터링 처리를 필요로 합니다. ‘SQL 삽입’의 경우, ‘$’ 문자열 대신 ‘#’을 사용하는 것이 권장되지만, 서비스 로직 상 수정할 수 없는 경우가 많습니다. 이럴 때는 사용자가 직접 escape 처리를 하거나 XML 매퍼를 사용하는 것을 권장합니다. ‘크로스사이트 스크립팅’은 프레임워크에서 필터링을 제공하거나 라이브러리를 통해 필터링을 적용할 수 있습니다.
Top 3 l 자원 누수
추가로 자주 검출되는 보안 약점은 ‘자원 누수’입니다. 자원 누수는 서비스의 가용성을 저하시킬 수 있으며, 공격자가 자원 누수를 이용하여 서비스 거부(DoS) 공격을 시도할 수 있습니다. 자원 고갈로 인해 시스템의 성능이 저하되거나 서비스가 중단될 수 있습니다. 파일, 소켓 등의 자원을 할당하고 해제할 때는 try-catch-finally 문을 사용하여 finally 블록에서 null 체크 후 close()를 호출하는 것이 좋습니다. Java 8 이상에서는 try-with-resources를 사용하여 자원을 관리하는 것이 권장됩니다. 최근에는 한 변수에 여러 자원을 중첩하여 할당하는 경우가 많습니다. 중첩된 변수 하나만 자원 해제하면 내부 자원에서 누수 가능성이 있으므로, 각 자원을 별도의 변수에 할당하고 각각 해제하는 것이 올바른 방법입니다.
Top 4, 5, 6 l 부적절한 예외 처리, 빈 catch 블록, 시스템 정보 노출
에러 처리 항목인 ‘부적절한 예외 처리, 빈 catch 블록, 시스템 정보 노출‘은 처음으로 시큐어 코딩을 적용하는 기업에서 자주 검출됩니다. 보안적인 내용이 아니라고 생각하실 수 있지만, 에러 처리 구문을 통해 악의적인 사용자가 시스템의 예외 처리 흐름을 조작하거나 예외가 발생했을 때 민감한 정보를 얻는 등의 공격을 시도할 수 있는 기회를 제공합니다. 특히, 공급망 보안과 관련해서도 소프트웨어가 외부 라이브러리나 서드파티 모듈과 상호작용할 때, 예외가 제대로 처리되지 않으면, 외부 모듈에서 발생한 예외가 시스템 전체에 영향을 미칠 수 있습니다. 뿐만 아니라, 시스템 정보 노출을 통해 소프트웨어의 구조나 취약점을 파악하고, 이를 기반으로 공급망 공격을 시도할 수 있습니다. 예를 들어, 특정 라이브러리나 모듈의 내부 구조를 알면, 해당 모듈의 취약점을 겨냥할 수 있습니다.
이 세 가지 항목은 서로 연관되어 있습니다. 우선, 세부적인 예외 처리를 하지 않고 최상위 예외 클래스인 Exception, Throwable, RuntimeException을 처리하면 ‘부적절한 예외 처리’가 발생할 수 있습니다. 세부적인 예외 처리를 추가할 때 catch 블록을 비워두는 경우가 많으며, 이 경우 ‘빈 catch 블록’으로 신규 검출됩니다. 많은 개발자 printStackTrace()를 사용하여 문제를 처리하지만, 이 방법은 ‘시스템 정보 노출‘ 항목으로 새로 검출됩니다. 따라서, 다음과 같은 연쇄적인 단계를 통해 조치해 주셔야 합니다.
| 🔍부적절한 예외처리, 빈 catch 블록, 시스템 정보 노출 조치 방법 |
| 1. 세부적인 예외 처리 2. 빈 catch 블록을 사용하지 않음 3. 에러 메시지를 로그에 기록하거나 커스텀 메시지로 사용 |
지금까지 주요 취약점 TOP 6과 예방법에 대해 알아봤습니다. 정보보호 전문인력과 예산이 부족한 중소기업에서는 소프트웨어의 개발 과정에서까지 보안을 고려하기가 쉽지 않습니다. 하지만 보안 취약점을 사전에 제거하지 않으면 앞서 보신 것과 같이 소프트웨어 공급망 공격 등 다양한 피해로 이어질 수 있습니다. 보안 취약점 관리, 더 이상 선택이 아닌 필수입니다.
