코더의 보안 정복: 코드형 인프라 시리즈 - 기능 수준 접근 제어 누락

Infrastructure as Code 시리즈의 다음 편을 시작합니다. 이 블로그는 여러분과 같은 개발자들이 조직 내에서 안전한 인프라를 배포할 때 보안 인식을 한 차원 더 높일 수 있도록 도와줄 것입니다.
참, 지난 블로그에서 다룬 보안 설정 오류 챌린지는 어떠셨나요? 지금 바로 기능 수준 접근 제어 누락 취약점을 해결해보고 싶다면 아래 플랫폼으로 이동하세요.
(위 링크를 클릭하면 Kubernetes 챌린지로 이동합니다. 플랫폼 접속 후 드롭다운 메뉴를 통해 Ansible, CloudFormation, Terraform 또는 Docker 중 원하는 환경을 선택할 수 있습니다.)
오늘날 배포되는 거의 모든 애플리케이션에는 사용자가 요청한 기능을 수행할 권한이 있는지 확인하는 접근 제어 메커니즘이 있습니다. 이는 애플리케이션을 구축할 때 보안과 기능성 모두를 뒷받침하는 핵심 요소입니다. 실제로 모든 웹 애플리케이션은 권한이 다른 사용자들이 프로그램을 사용할 수 있도록 접근 제어 기능을 필요로 합니다.
하지만 이러한 접근 제어 검증 기능이 인프라 수준에서 수행되지 않거나 잘못 설정되면 문제가 발생할 수 있습니다. 인프라 수준의 접근 제어가 완벽하게 갖춰지지 않으면 기업 전체가 해커에게 노출되며, 해커는 이 취약점을 이용해 무단으로 정보를 엿보거나 전면적인 공격을 시도할 수 있습니다.
사실, 누락되거나 잘못 설정된 기능 접근 제어 취약점을 악용하는 것은 매우 쉽습니다. 공격자가 고도의 기술을 가질 필요도 없습니다. 애플리케이션을 지원하는 프레임워크 내에서 어떤 명령어가 기능을 실행하는지만 알면 됩니다. 그 방법을 안다면 시행착오를 거치는 것은 시간문제입니다. 허용되지 않아야 할 요청을 계속해서 보내다가 하나라도 성공하는 순간, 타겟이 된 웹사이트, 애플리케이션, 서버, 심지어 네트워크 전체가 노출될 수 있습니다.
기능 수준 접근 제어 누락 공격은 어떻게 작동할까요?
기능 수준 접근 제어 문제가 조직 내에 스며드는 경로는 다양합니다. 예를 들어, 기능 수준 접근 제어를 애플리케이션에만 맡기고 하부 인프라에서 검증하지 않는 경우가 있습니다. 또는 인프라 수준의 접근 제어가 잘못 설정될 수도 있습니다. 때로는 관리자가 권한 없는 사용자는 높은 권한을 가진 사용자만 볼 수 있는 인프라 리소스에 접근하는 방법을 모를 것이라고 가정하기도 하는데, 이는 거의 효과가 없는 "보안을 통한 모호성(security by obscurity)" 모델에 불과합니다.
보안을 통한 모호성의 예로, 다음 URL은 공격에 취약할 가능성이 높습니다.
http://companywebsite.com/app/NormalUserHomepage
인증된 사용자가 '강제 URL 브라우징(Forced URL Browsing)'이라는 기법을 사용하면 관리자에게만 표시되는 페이지에 접근을 시도할 수 있습니다. 예를 들면 다음과 같습니다.
http://companywebsite.com/app/AdminPages
서버 측 검증이 존재하지 않는다면, 공격자는 단순히 관리자 페이지를 보게 될 것이며(요청한 이름과 일치할 경우), 관리자가 해당 페이지에서 수행하는 추가 기능에 접근할 수 있게 됩니다. 서버가 공격자에게 "페이지를 찾을 수 없음" 오류를 반환하더라도, 공격자는 관리자 페이지의 이름을 알아낼 때까지 계속해서 시도할 수 있습니다.
공격자에게 기능 수준 접근 제어 누락을 악용하는 과정도 이와 비슷합니다. 권한 없는 페이지를 브라우징하는 대신, 기능 요청을 보내는 방식입니다. 예를 들어, 관리자 권한을 가진 새 사용자를 생성하려고 시도할 수 있습니다. 프레임워크에 따라 요청은 다음과 같은 형태가 될 것입니다.
POST/action/createuser name=hacker&pw=password&role=admin
기능 수준 접근 제어가 없다면 위 예시는 성공하게 되고 새로운 관리자 계정이 생성됩니다. 공격자가 새로 생성된 관리자 계정으로 다시 로그인하면, 해당 네트워크나 서버의 다른 관리자와 동일한 접근 권한을 갖게 됩니다.
기능 수준 접근 제어 누락 해결 방법
기능 수준 접근 제어 누락 취약점은 공격자가 악용하기 매우 쉽기 때문에 이를 발견하고 수정하며 예방하는 것이 무엇보다 중요합니다. 다행히 약간의 노하우와 기본적인 코드형 인프라(IaC) 보안 교육만 있다면 그리 어렵지 않게 해결할 수 있습니다.
가장 중요한 보호 대책은 인프라 수준에서 역할 기반 권한 부여를 구현하는 것입니다. 애플리케이션이 해당 기능을 처리하도록 절대 맡기지 마십시오. 애플리케이션이 이를 수행하더라도 인프라 측면의 권한 부여를 병행하면 누락되는 부분을 확실히 방지할 수 있습니다. 이상적으로는 조직의 운영 절차에 내장되어 모든 신규 애플리케이션에 적용되는 중앙 집중식 위치(예: AWS IAM, Azure IAM 등)에서 권한 부여가 이루어져야 합니다. 이러한 권한 부여 프로세스는 프레임워크 자체에서 제공하거나 사용하기 쉬운 다양한 외부 모듈을 통해 구현할 수 있습니다.
마지막으로, 조직은 최소 권한의 원칙을 수용해야 합니다. 모든 작업과 기능은 기본적으로 거부되어야 하며, 권한 부여 프로세스를 통해 유효한 사용자에게 필요한 작업만 수행할 수 있도록 허용해야 합니다. 사용자에게는 필요한 기능을 수행하는 데 필요한 만큼의 권한만, 필요한 기간 동안만 부여해야 합니다.
기능 수준 접근 제어 누락은 치명적인 결과를 초래할 수 있습니다. 하지만 다행히도 조직 내에 올바른 인프라 수준의 권한 부여 관행을 구축함으로써 이러한 문제가 발생하지 않도록 쉽게 예방할 수 있습니다.
실제 환경에서 접근 제어 버그를 찾아낼 준비가 되셨나요? 다음 Docker 코드 스니펫을 비교해 보세요. 하나는 취약한 코드이고, 다른 하나는 안전한 코드입니다.
취약한 코드:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
안전한 코드:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
더 알아보기 및 도전 과제
Secure Code Warrior 블로그에서 이 취약점에 대한 더 깊은 통찰력을 얻고, 다른 보안 결함 및 취약점으로부터 조직과 고객을 보호하는 방법을 확인해 보세요.
앞서 놓치셨다면, Secure Code Warrior 플랫폼에서 IaC 게임화 보안 챌린지를 시도하여 사이버 보안 기술을 꾸준히 연마하고 최신 상태로 유지해 보세요.
다음 장도 기대해 주세요!
배포 전 AI 기반 개발 거버넌스 확보
AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.
더 많은 블로그 살펴보기
보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
배포 전 AI 기반 개발 보안 확보
소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.



.avif)