웹 애플리케이션 서버 보안을 위한 8가지 필수 팁

웹 애플리케이션 서버는 대부분 대중에게 공개되어 있어 다양한 보안 위협에 항상 노출되어 있습니다.

이러한 위협은 예측 가능하고 예방 가능한 것들도 있지만, 전혀 예상치 못한 새로운 형태의 위협도 존재합니다. 후자의 가능성에 대비하여 웹 애플리케이션 서버를 최대한 안전하게 유지하기 위한 필수적인 조치들을 소개합니다.

이러한 조치를 살펴보기 전에, 웹 애플리케이션 서버가 독립된 존재가 아니라는 점을 명심해야 합니다. 서버는 웹 애플리케이션 팜의 핵심 구성 요소로서, 웹 애플리케이션을 호스팅하고 운영하는 데 중요한 역할을 합니다. 따라서, 웹 애플리케이션 보안을 위해서는 서버뿐만 아니라 서버를 둘러싼 모든 요소들을 고려하여 전체적인 보안 환경을 구축해야 합니다.

웹 애플리케이션을 호스팅하고 실행하는 데 필요한 기본적인 환경은 운영 체제(Linux, Windows), 웹 서버 소프트웨어(Apache, Nginx), 데이터베이스 서버 등으로 구성됩니다. 이러한 구성 요소 중 하나라도 취약해지면 공격자가 시스템에 접근하여 악의적인 행위를 수행할 수 있게 됩니다.

따라서, 앞서 언급한 환경을 보호하기 위한 가장 기본적인 단계는 각 구성 요소에 대한 보안 지침과 모범 사례를 숙지하는 것입니다. 더불어, 거의 모든 웹 애플리케이션 환경에 적용되는 몇 가지 일반적인 보안 원칙을 살펴보겠습니다.

방화벽, 그 오해와 진실

“나는 이미 네트워크를 보호하는 방화벽이 있으니 괜찮겠지.” 라고 생각할 수 있습니다. 하지만 안심하기에는 아직 이릅니다.

방화벽은 네트워크 경계를 관리하여 외부의 위협을 차단하고 허용된 사용자만 접근할 수 있도록 하는 역할을 합니다. 하지만 방화벽만으로는 공격자가 웹 애플리케이션 서버에 침투하는 것을 완벽하게 막을 수 없습니다.

왜일까요?

그 이유는 간단합니다. 일반적인 네트워크 방화벽은 포트 80과 443(즉, HTTP 및 HTTPS)을 통해 들어오는 트래픽을 허용해야 합니다. 이때, 방화벽은 해당 포트를 통과하는 트래픽의 내용이나 출처를 정확히 알지 못합니다.

웹 애플리케이션을 보호하기 위해서는 웹 트래픽을 정밀하게 분석하고, 크로스 사이트 스크립팅이나 코드 삽입 등의 취약점을 이용하려는 시도를 차단하는 웹 애플리케이션 방화벽(WAF)이 필요합니다. WAF는 일반적인 백신 프로그램처럼 작동하여 데이터 스트림에서 알려진 패턴을 찾아 악성 요청을 감지하고 차단합니다.

효과적인 WAF는 새로운 위협 패턴에 대응할 수 있도록 데이터베이스가 지속적으로 업데이트되어야 합니다. 하지만 패턴 기반 공격 방어의 한계는, 웹 애플리케이션이 WAF가 아직 인식하지 못하는 새로운 위협의 첫 번째 공격 대상이 될 수 있다는 점입니다.

이러한 이유로 웹 애플리케이션은 네트워크 방화벽 외에도 추가적인 보안 계층이 필요합니다.

웹 취약점 정밀 검사

네트워크 보안 스캐너를 사용하고 있다고 해서 웹 애플리케이션 서버에 취약점이 없다고 단정할 수 없습니다.

일반적인 네트워크 스캐너는 애플리케이션 고유의 취약점을 감지하는 데 한계가 있습니다. 이러한 취약점을 찾아내고 제거하기 위해서는 침투 테스트, 블랙박스 스캐닝, 소스 코드 감사 등 다양한 테스트와 감사를 웹 애플리케이션에 적용해야 합니다. 하지만 이러한 방법들 또한 완벽한 해결책은 아니며, 가능한 모든 방법을 동원하여 최대한 많은 취약점을 제거해야 합니다.

예를 들어, Invicti와 같은 보안 스캐너를 사용하면 악용 가능한 코드가 실제 환경에 배포되는 것을 방지할 수 있습니다. 하지만 수동 코드 감사로만 발견할 수 있는 논리적 취약점도 존재합니다. 수동 감사는 비용이 많이 들 뿐 아니라 사람이 수행하는 작업이기에 오류가 발생하기 쉽습니다. 이러한 감사를 효율적으로 수행하는 좋은 방법은 개발자 교육을 통해 개발 프로세스에 포함시키는 것입니다.

개발자 보안 교육

개발자들은 종종 이상적인 환경에서 애플리케이션이 실행된다고 생각하는 경향이 있습니다. 즉, 무한한 리소스가 있고, 사용자는 실수를 하지 않으며, 악의적인 의도를 가진 사람은 없다고 생각합니다. 하지만 현실은 언젠가 예상치 못한 문제, 특히 정보 보안과 관련된 문제에 직면하게 됩니다.

웹 애플리케이션을 개발할 때, 개발자는 보안 메커니즘을 이해하고 이를 코드에 적용하여 취약점을 최소화해야 합니다. 이러한 보안 메커니즘은 개발팀이 준수해야 하는 모범 사례 지침에 포함되어야 합니다.

소프트웨어 품질 감사는 모범 사례 준수 여부를 확인하는 데 사용됩니다. 모범 사례와 감사는 URL 내부에 암호화되지 않은 가시적인 매개변수를 전달하는 것과 같이, 공격자가 쉽게 악용할 수 있는 논리적 취약점을 발견하는 데 중요한 역할을 합니다.

불필요한 기능 차단

웹 애플리케이션에 오류가 없고 웹 환경이 안전하다고 가정하더라도, 서버 자체적으로 공격으로부터 서버를 보호하기 위해 취할 수 있는 조치들이 있습니다.

가장 기본적인 방법은 잠재적인 취약점이 될 수 있는 진입점의 수를 줄이는 것입니다. 공격자가 웹 서버의 구성 요소 중 하나를 악용할 수 있다면, 전체 서버가 위험에 노출될 수 있습니다.

서버에서 열려 있는 포트와 실행 중인 서비스 또는 데몬 목록을 확인하고, 불필요한 항목을 닫거나 비활성화해야 합니다. 서버는 웹 애플리케이션 실행 외에 다른 용도로 사용되어서는 안 되므로, 추가 기능은 네트워크의 다른 서버로 옮기는 것을 고려해야 합니다.

개발, 테스트, 프로덕션 환경 분리

개발자와 테스터는 실제 애플리케이션 서버와는 분리된 환경에서 작업해야 합니다. 관리자를 신뢰하더라도 비밀번호가 유출되어 원치 않는 접근이 발생할 수 있습니다.

비밀번호와 권한 문제 외에도, 개발 및 테스트 환경에는 백도어, 로그 파일, 소스 코드, 데이터베이스 사용자 이름 및 비밀번호와 같은 중요한 정보가 포함될 수 있습니다. 웹 애플리케이션 배포 프로세스는 관리자가 수행해야 하며, 실제 서버에 애플리케이션을 설치한 후에도 중요한 정보가 노출되지 않도록 해야 합니다.

애플리케이션의 데이터에도 동일한 분리 개념을 적용해야 합니다. 테스터와 개발자는 실제 데이터를 선호하지만, 프로덕션 데이터베이스나 그 복사본에 대한 접근 권한을 부여하는 것은 위험합니다. 개인 정보 보호 문제 외에도, 데이터베이스에는 서버 내부 설정(엔드포인트 주소, 경로 이름 등)과 관련된 구성 매개변수가 포함될 수 있습니다.

서버 소프트웨어 최신 유지

당연한 조치처럼 보이지만, 소프트웨어 업데이트는 종종 간과됩니다. SUCURI에 따르면, CMS 애플리케이션의 59%가 최신 상태가 아니어서 보안 위협에 노출되어 있습니다.

새로운 위협은 매일 등장하며, 이러한 위협으로부터 서버를 보호하는 유일한 방법은 최신 보안 패치를 항상 설치하는 것입니다.

앞서 언급했듯이 네트워크 방화벽과 네트워크 보안 스캐너만으로는 웹 애플리케이션에 대한 공격을 막기에 충분하지 않습니다. 하지만 DDoS 공격과 같은 일반적인 사이버 보안 위협으로부터 서버를 보호하는 데에는 필수적입니다. 따라서 이러한 애플리케이션을 항상 업데이트하고, 비즈니스 애플리케이션을 효과적으로 보호하고 있는지 확인해야 합니다.

접근 권한 제한

기본적인 보안 조치 중 하나는 RDP 및 SSH와 같은 원격 접근 트래픽을 암호화하고 터널링된 상태로 유지하는 것입니다. 또한, 원격 접근이 허용되는 IP 주소 목록을 최소화하여, 허용되지 않은 IP 주소에서의 원격 로그인 시도를 차단하는 것이 중요합니다.

관리자는 종종 서비스 계정에 모든 권한을 부여합니다. 그렇게 하면 “모든 것이 잘 작동할 것”이라고 생각하기 때문입니다. 하지만 공격자가 서비스의 취약점을 이용하여 서버에 침투할 수 있으므로, 이는 좋은 방법이 아닙니다. 만약 해당 서비스가 관리자 권한으로 실행 중이라면, 공격자는 전체 서버를 장악할 수 있습니다.

보안과 실용성 사이에서 균형을 맞추기 위해서는, 로그인 계정과 서비스 계정 모두에게 각 작업 수행에 필요한 최소한의 권한만 부여해야 합니다.

예를 들어, 관리자가 여러 작업을 수행하기 위해 여러 개의 다른 계정을 정의할 수 있습니다. 하나는 백업을 만들고, 다른 하나는 로그 파일을 정리하고, 또 다른 계정은 서비스 설정을 변경하는 식입니다. 데이터베이스 계정에도 동일한 원칙을 적용해야 합니다. 일반적으로 애플리케이션은 데이터를 읽고 쓰는 권한만 필요하며, 테이블을 생성하거나 삭제할 권한은 필요하지 않습니다. 따라서, 각 계정이 필요한 작업만 수행할 수 있도록 권한을 제한해야 합니다.

서버 로그 모니터링

로그 파일은 중요한 정보를 담고 있습니다.

관리자는 정기적으로 로그 파일을 모니터링하여 손상되기 전에 의심스러운 활동을 감지해야 합니다. 로그 파일 분석을 통해 애플리케이션을 더 잘 보호하는 데 도움이 되는 많은 정보를 얻을 수 있습니다. 공격이 발생했을 때, 로그 파일은 공격이 시작된 시점과 방법을 파악하는 데 도움이 되어 피해를 줄이는 데 유용합니다.

또한, 오래된 로그 파일을 삭제하거나 정리하여 서버 공간이 부족해지지 않도록 자동화된 절차를 마련해야 합니다.

보너스 팁: 지속적인 정보 습득

인터넷에는 웹 애플리케이션 보안에 유용한 무료 정보가 많이 있습니다. 평판이 좋은 보안 블로그 (예: 이 글과 같은)를 통해 새로운 정보를 놓치지 않고, 보안 및 웹 산업 동향에 대한 최신 정보를 습득해야 합니다.

온라인 강의, 강좌, 비디오 및 책 또한 유용한 지식의 원천입니다. 매주 한두 시간 정도를 투자하여 최신 정보를 습득함으로써, 애플리케이션 보안을 위한 올바른 조치를 취하고 있다는 확신을 가질 수 있습니다.