코드 시리즈로 보안 인프라를 정복코더: 기능 수준 액세스 제어 누락

게시일: 2020년 5월 11일
작성자: 마티아스 마두, Ph.
사례 연구

코드 시리즈로 보안 인프라를 정복코더: 기능 수준 액세스 제어 누락

게시일: 2020년 5월 11일
작성자: 마티아스 마두, Ph.
리소스 보기
리소스 보기

인프라의 다음 할부인 Code 시리즈로, 자신과 같은 개발자가 조직 내에 보안 인프라를 배포할 때 완전히 새로운 차원의 보안 인식으로 이어질 블로그입니다.

오, 그건 그렇고... 이전 블로그에서 보안 구성 오류 로 인해 어떻게 요금을 처리했습니까? 지금 당장 누락된 기능 수준 액세스 제어 취약점을 해결하려면 다음 플랫폼을 통해 이동하십시오.

위의 링크는 Kubernetes 챌린지로 이동하지만, 일단 플랫폼에서 드롭다운을 사용하여 Ansible, CloudFormation, Terraform 또는 Docker에서 선택하십시오. 당신의 선택.)

오늘날 배포된 거의 모든 응용 프로그램에는 사용자가 요청된 기능을 수행할 수 있는 권한이 있는지 여부를 확인하는 일종의 액세스 제어 메커니즘이 있습니다. 응용 프로그램을 만들 때 좋은 보안과 기능의 초석입니다. 실제로 모든 웹 응용 프로그램은 권한이 다른 사용자가 프로그램을 사용할 수 있도록 액세스 제어가 필요합니다.

그러나 액세스 제어를 위한 동일한 확인 기능이 인프라 수준에서 수행되지 않거나 잘못 구성되는 경우 문제가 발생할 수 있습니다. 완벽한 순서로 인프라 수준 액세스 제어가 없으면 이 취약점을 무단 스누핑 이나 전체 공격에 대한 게이트웨이로 사용할 수 있는 해커에게 전체 엔터프라이즈가 열립니다.

실제로 누락되었거나 잘못 구성된 기능 액세스 제어 취약점을 악용하는 것은 매우 쉽습니다. 공격자는 지나치게 숙련 될 필요가 없습니다. 응용 프로그램을 지원하는 프레임워크 내에서 함수를 실행하는 명령을 알아야 합니다. 그렇게 한다면, 그것은 단지 시행 착오의 문제입니다. 허용되지 않아야 하는 요청을 지속적으로 제출할 수 있으며, 성공하는 즉시 대상 웹 사이트, 응용 프로그램, 서버 또는 전체 네트워크가 노출될 수 있습니다.

누락된 기능 수준 액세스 제어 악용은 어떻게 작동합니까?

함수 수준 액세스 컨트롤이 조직에 침투할 수 있는 몇 가지 방법이 있습니다. 예를 들어 함수 수준 액세스는 응용 프로그램에 남아 있고 기본 인프라에서 확인할 수 없습니다. 또는 인프라 수준 액세스 제어를 잘못 구성할 수 있습니다. 경우에 따라 관리자는 권한이 없는 사용자만 볼 수 있어야 하는 인프라 리소스에 액세스하는 방법을 알지 못한다고 가정하고 거의 작동하지 않는 "보안별 보안" 모델을 볼 수 있습니다.

모호함으로 보안의 예를 들어 다음 URL은 공격에 취약할 수 있습니다.

http://companywebsite.com/app/NormalUserHomepage

인증된 사용자가 강제 URL 브라우징이라는 기술을 사용하는 경우 관리자에게만 표시되는 페이지에 도달하려고 시도할 수 있습니다. 예를 들어 다음과 같은 경우

http://companywebsite.com/app/AdminPages

서버 측 확인이 없는 경우 관리자 페이지(이름과 요청과 일치하는 경우)가 표시되고 관리자가 새 페이지에서 수행하는 추가 기능에 액세스할 수 있습니다. 서버가 공격자에게 "페이지를 찾을 수 없는" 오류를 반환하는 경우 관리자 페이지가 지정된 이름을 알아낼 때까지 계속 시도할 수 있습니다.

공격자의 경우 누락된 함수 수준 액세스 컨트롤을 악용하는 것과 유사한 프로세스입니다. 승인되지 않은 페이지를 탐색하는 대신 함수 요청을 보냅니다. 예를 들어 관리자 권한이 있는 새 사용자를 만들려고 할 수 있습니다. 따라서 프레임워크에 따라 요청이 다음과 같이 보입니다.

POST/액션/생성 사용자 이름=해커&pw=암호 및 역할=관리자

함수 수준 액세스 컨트롤이 없으면 위의 예제가 성공하고 새 관리자 계정이 만들어집니다. 공격자가 새 관리자로 다시 로그인하면 해당 네트워크 또는 서버의 다른 관리자와 동일한 액세스 및 권한이 있습니다.

누락된 함수 수준 액세스 컨트롤에 대한 수정

공격자가 누락된 기능 수준의 액세스 제어 취약점을 악용하는 것은 매우 쉽기 때문에 이를 찾아서 수정하고 예방하는 것이 매우 중요합니다. 다행히도 몇 가지 노하우와 기본적인 인프라 보안 교육만 받으면 크게 어렵지 않습니다.

주요 보호는 인프라 수준에서 역할 기반 권한 부여를 구현할 때 비롯됩니다. 응용 프로그램이 해당 기능을 처리하도록 신뢰하지 마십시오. 그렇게 하더라도 인프라 측 승인을 받으면 아무 것도 놓치지 않을 수 있습니다. 이상적으로 권한 부여는 조직의 루틴에 내장되어 모든 새 응용 프로그램에 적용되는 중앙 집중식 위치(예: 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 이 취약점에 대한 자세한 정보를 위한 블로그 페이지와 다른 보안 결함 및 취약점의 파괴로부터 조직과 고객을 보호하는 방법.

그리고 이전에 놓친 경우 IaC 게임보안 문제를 시도할 수 있습니다. Secure Code Warrior 모든 사이버 보안 기술을 연마하고 최신 상태로 유지할 수 있는 플랫폼입니다.

다음 챕터를 계속 지켜봐 주시기 바랍니다!

리소스 보기
리소스 보기

저자

마티아스 마두, Ph.

Matias는 15년 이상의 소프트웨어 보안 경험을 가진 연구원이자 개발자입니다. 그는 Fortify 소프트웨어와 같은 회사와 자신의 회사를 위한 솔루션을 개발했습니다. Sensei 안전. 그의 경력을 통해, Matias는 상용 제품으로 주도하고 자신의 벨트 아래 10 개 이상의 특허를 자랑하는 여러 응용 프로그램 보안 연구 프로젝트를 주도하고있다. 마티아스는 책상에서 떨어져 있을 때 고급 응용 프로그램 보안 교육을 위한 강사로 일했습니다. courses RSA 컨퍼런스, 블랙 햇, 데프콘, BSIMM, OWASP AppSec 및 브루콘을 포함한 글로벌 컨퍼런스에서 정기적으로 강연합니다.

마티아스는 겐트 대학교에서 컴퓨터 공학 박사 학위를 취득했으며, 프로그램 난독화를 통해 응용 프로그램 보안을 연구하여 응용 프로그램의 내부 작동을 숨깁니다.

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

코드 시리즈로 보안 인프라를 정복코더: 기능 수준 액세스 제어 누락

게시일: 2020년 5월 11일
마티아스 마두, Ph.

인프라의 다음 할부인 Code 시리즈로, 자신과 같은 개발자가 조직 내에 보안 인프라를 배포할 때 완전히 새로운 차원의 보안 인식으로 이어질 블로그입니다.

오, 그건 그렇고... 이전 블로그에서 보안 구성 오류 로 인해 어떻게 요금을 처리했습니까? 지금 당장 누락된 기능 수준 액세스 제어 취약점을 해결하려면 다음 플랫폼을 통해 이동하십시오.

위의 링크는 Kubernetes 챌린지로 이동하지만, 일단 플랫폼에서 드롭다운을 사용하여 Ansible, CloudFormation, Terraform 또는 Docker에서 선택하십시오. 당신의 선택.)

오늘날 배포된 거의 모든 응용 프로그램에는 사용자가 요청된 기능을 수행할 수 있는 권한이 있는지 여부를 확인하는 일종의 액세스 제어 메커니즘이 있습니다. 응용 프로그램을 만들 때 좋은 보안과 기능의 초석입니다. 실제로 모든 웹 응용 프로그램은 권한이 다른 사용자가 프로그램을 사용할 수 있도록 액세스 제어가 필요합니다.

그러나 액세스 제어를 위한 동일한 확인 기능이 인프라 수준에서 수행되지 않거나 잘못 구성되는 경우 문제가 발생할 수 있습니다. 완벽한 순서로 인프라 수준 액세스 제어가 없으면 이 취약점을 무단 스누핑 이나 전체 공격에 대한 게이트웨이로 사용할 수 있는 해커에게 전체 엔터프라이즈가 열립니다.

실제로 누락되었거나 잘못 구성된 기능 액세스 제어 취약점을 악용하는 것은 매우 쉽습니다. 공격자는 지나치게 숙련 될 필요가 없습니다. 응용 프로그램을 지원하는 프레임워크 내에서 함수를 실행하는 명령을 알아야 합니다. 그렇게 한다면, 그것은 단지 시행 착오의 문제입니다. 허용되지 않아야 하는 요청을 지속적으로 제출할 수 있으며, 성공하는 즉시 대상 웹 사이트, 응용 프로그램, 서버 또는 전체 네트워크가 노출될 수 있습니다.

누락된 기능 수준 액세스 제어 악용은 어떻게 작동합니까?

함수 수준 액세스 컨트롤이 조직에 침투할 수 있는 몇 가지 방법이 있습니다. 예를 들어 함수 수준 액세스는 응용 프로그램에 남아 있고 기본 인프라에서 확인할 수 없습니다. 또는 인프라 수준 액세스 제어를 잘못 구성할 수 있습니다. 경우에 따라 관리자는 권한이 없는 사용자만 볼 수 있어야 하는 인프라 리소스에 액세스하는 방법을 알지 못한다고 가정하고 거의 작동하지 않는 "보안별 보안" 모델을 볼 수 있습니다.

모호함으로 보안의 예를 들어 다음 URL은 공격에 취약할 수 있습니다.

http://companywebsite.com/app/NormalUserHomepage

인증된 사용자가 강제 URL 브라우징이라는 기술을 사용하는 경우 관리자에게만 표시되는 페이지에 도달하려고 시도할 수 있습니다. 예를 들어 다음과 같은 경우

http://companywebsite.com/app/AdminPages

서버 측 확인이 없는 경우 관리자 페이지(이름과 요청과 일치하는 경우)가 표시되고 관리자가 새 페이지에서 수행하는 추가 기능에 액세스할 수 있습니다. 서버가 공격자에게 "페이지를 찾을 수 없는" 오류를 반환하는 경우 관리자 페이지가 지정된 이름을 알아낼 때까지 계속 시도할 수 있습니다.

공격자의 경우 누락된 함수 수준 액세스 컨트롤을 악용하는 것과 유사한 프로세스입니다. 승인되지 않은 페이지를 탐색하는 대신 함수 요청을 보냅니다. 예를 들어 관리자 권한이 있는 새 사용자를 만들려고 할 수 있습니다. 따라서 프레임워크에 따라 요청이 다음과 같이 보입니다.

POST/액션/생성 사용자 이름=해커&pw=암호 및 역할=관리자

함수 수준 액세스 컨트롤이 없으면 위의 예제가 성공하고 새 관리자 계정이 만들어집니다. 공격자가 새 관리자로 다시 로그인하면 해당 네트워크 또는 서버의 다른 관리자와 동일한 액세스 및 권한이 있습니다.

누락된 함수 수준 액세스 컨트롤에 대한 수정

공격자가 누락된 기능 수준의 액세스 제어 취약점을 악용하는 것은 매우 쉽기 때문에 이를 찾아서 수정하고 예방하는 것이 매우 중요합니다. 다행히도 몇 가지 노하우와 기본적인 인프라 보안 교육만 받으면 크게 어렵지 않습니다.

주요 보호는 인프라 수준에서 역할 기반 권한 부여를 구현할 때 비롯됩니다. 응용 프로그램이 해당 기능을 처리하도록 신뢰하지 마십시오. 그렇게 하더라도 인프라 측 승인을 받으면 아무 것도 놓치지 않을 수 있습니다. 이상적으로 권한 부여는 조직의 루틴에 내장되어 모든 새 응용 프로그램에 적용되는 중앙 집중식 위치(예: 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 이 취약점에 대한 자세한 정보를 위한 블로그 페이지와 다른 보안 결함 및 취약점의 파괴로부터 조직과 고객을 보호하는 방법.

그리고 이전에 놓친 경우 IaC 게임보안 문제를 시도할 수 있습니다. Secure Code Warrior 모든 사이버 보안 기술을 연마하고 최신 상태로 유지할 수 있는 플랫폼입니다.

다음 챕터를 계속 지켜봐 주시기 바랍니다!

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.