코더는 보안을 정복 : 공유 및 학습 시리즈 - 안전하지 않은 직렬화

게시일: 2019년 9월 20일
by Jaap Karan Singh
사례 연구

코더는 보안을 정복 : 공유 및 학습 시리즈 - 안전하지 않은 직렬화

게시일: 2019년 9월 20일
by Jaap Karan Singh
리소스 보기
리소스 보기

응용 프로그램에 따라 직렬화 프로세스가 항상 발생할 수 있습니다. 데이터 구조 또는 개체 상태가 통신으로 저장되거나 전송될 수 있는 형식으로 변환될 때마다 설명하는 데 사용되는 용어입니다. 직렬화는 현재 구조화된 데이터를 저장하기 전의 개체 또는 데이터 문자열로 다시 돌리면서 이 프로세스와 는 반대입니다.

응용 프로그램이 데이터를 신뢰할 수 있는 것으로 분류할 때마다 안전하지 않은 직렬화가 발생할 수 있습니다. 사용자가 새로 재구성된 데이터를 수정할 수 있는 경우 코드 주입, 서비스 거부 공격 또는 단순히 개체가격을 낮추거나 권한을 높이는 것과 같은 응용 프로그램 내에서 약간의 이점을 제공하기 위해 데이터를 변경하는 등 모든 종류의 악의적인 활동을 수행할 수 있습니다.

이 에피소드에서 우리는 배울 것입니다 :

  • 공격자가 안전하지 않은 직렬화를 악용하는 방법
  • 안전하지 않은 직렬화가 위험한 이유
  • 이 취약점을 해결할 수 있는 기술입니다.

공격자는 안전하지 않은 직렬화를 어떻게 악용합니까?

요즘 데이터 직렬화에 가장 인기 있는 데이터 형식은 JSON이지만 XML은 두 번째에 가깝습니다. 꽤 많은 프로그래밍 언어는 JSON 또는 XML보다 더 많은 기능을 포함하는 데이터를 직렬화하기 위한 자체 방법을 제공합니다. 어쨌든 개발자가 이 시리즈의 다른 블로그에서 오래된 진언을 따르는 것과 는 달리, "사용자 입력을 신뢰하지 마십시오!"

사용자가 수신 서버에서 실수로 실행할 수 있는 해당 문자열에 코드를 삽입할 수 있으므로 사용자 입력을 신뢰할 수 없습니다. 또한 원시 직렬화된 데이터에 액세스하고 악용할 수 있으므로 신뢰할 수 없는 동일한 범주에 속해야 합니다.

예를 들어 포럼 응용 프로그램이 PHP 개체 직렬화를 사용하여 사용자의 식별 및 역할이 포함된 쿠키를 저장하는 경우 이를 조작할 수 있습니다. 악의적인 사용자가 "사용자" 역할을 대신 "관리자"로 변경할 수 있습니다. 또는 데이터 문자열에서 제공하는 개구부를 사용하여 "신뢰할 수 있는" 데이터를 처리할 때 서버에서 잘못 해석되고 실행할 수 있는 코드를 삽입할 수 있습니다.

안전하지 않은 직렬화가 위험한 이유는 무엇입니까?

이러한 종류의 공격에는 해커의 부분에 약간의 기술이 필요하며 공격자가 조작되고 분류된 데이터에서 서버가 수락할 코드 또는 악용을 배우는 동안 시행 착오도 가 필요합니다. 즉, 이것은 그것을 사용 하 여 충분히 숙련 된 해커에 게 제공 하는 잠재적인 힘 때문에 일반적으로 악용 취약점.

직렬화된 데이터가 어떻게 사용되는지에 따라 이전 블로그에서 다루는 많은 공격을 포함하여 모든 수의 공격을 사용할 수 있습니다. 안전하지 않은 직렬화는 원격 교차 코드 주입, 교차 사이트 스크립팅, 서비스 거부, 액세스 제어 하이재킹 및 물론 SQL 및 XML 주입 공격에 대한 게이트웨이가 될 수 있습니다. 기본적으로 시작 지점을 열고, 모든 데이터를 신뢰할 수 있도록 분류되고 있음을 선언하고, 공격자가 이를 시도하고 악용할 수 있도록 합니다.

안전하지 않은 직렬화 제거

조직이 안전하지 않은 직렬화를 방지하기 위해 할 수 있는 가장 안전한 일은 응용 프로그램이 직렬화된 데이터를 수락하지 못하도록 제한하는 것입니다. 그러나 이러한 종류의 공격을 방어하기 위해 사용할 수있는 다른 기술이 있기 때문에 불가능하거나 현실적이지 않을 수도 있지만 걱정할 필요가 없습니다.

가능하면 데이터를 숫자 값과 같은 것으로 소독할 수 있습니다. 이 완전히 악용을 중지 하지 않을 수 있습니다., 하지만 코드 주입 발생을 방지 할 것 이다. 더 나은 단순히 데이터 문자열이 조작되지 않았는지 확인할 수있는 디지털 서명과 같은 직렬화된 데이터에 대한 무결성 검사의 일종을 요구하는 것입니다. 또한 모든 직렬화 프로세스는 격리되고 낮은 권한 환경에서 실행되어야 합니다.

이러한 보호 기능이 있는 후에는 실패한 모든 직렬화 시도와 데이터를 분류하는 컨테이너 또는 서버에서 오는 네트워크 활동을 기록해야 합니다. 사용자가 로그에서 몇 개 이상의 직렬화 오류를 트리거하는 경우 악의적인 내부자이거나 자격 증명을 해킹하거나 도난당했음을 나타내는 것이 좋습니다. 또한 지속적으로 직렬화 오류를 트리거하는 사용자를 위한 자동 잠금과 같은 것을 고려할 수도 있습니다.

안전하지 않은 직렬화에 대처하기 위해 사용하는 이러한 도구 중 어느 도구든 핵심은 사용자가 만지거나 조작했을 수 있는 데이터임을 기억하십시오. 절대 신뢰하지 마십시오.

알려진 취약점이 있는 구성 요소 사용에 대한 자세한 정보

추가 읽기를 위해, 당신은 OWASP가 안전하지 않은 직렬화에 대해말하는 것을 살펴 볼 수 있습니다. 또한 새로운 방어 지식을 테스트에 넣을 수 있습니다. Secure Code Warrior 사이버 보안 팀이 궁극적인 사이버 전사가 될 수 있도록 하는 플랫폼. 이 취약점을 물리치는 것에 대해 자세히 알아보려면 Secure Code Warrior 블로그.

리소스 보기
리소스 보기

저자

야프 카란 싱

더 알고 싶으신가요?

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

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

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

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

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

리소스 허브

코더는 보안을 정복 : 공유 및 학습 시리즈 - 안전하지 않은 직렬화

게시일: 2019년 9월 20일
Jaap Karan Singh

응용 프로그램에 따라 직렬화 프로세스가 항상 발생할 수 있습니다. 데이터 구조 또는 개체 상태가 통신으로 저장되거나 전송될 수 있는 형식으로 변환될 때마다 설명하는 데 사용되는 용어입니다. 직렬화는 현재 구조화된 데이터를 저장하기 전의 개체 또는 데이터 문자열로 다시 돌리면서 이 프로세스와 는 반대입니다.

응용 프로그램이 데이터를 신뢰할 수 있는 것으로 분류할 때마다 안전하지 않은 직렬화가 발생할 수 있습니다. 사용자가 새로 재구성된 데이터를 수정할 수 있는 경우 코드 주입, 서비스 거부 공격 또는 단순히 개체가격을 낮추거나 권한을 높이는 것과 같은 응용 프로그램 내에서 약간의 이점을 제공하기 위해 데이터를 변경하는 등 모든 종류의 악의적인 활동을 수행할 수 있습니다.

이 에피소드에서 우리는 배울 것입니다 :

  • 공격자가 안전하지 않은 직렬화를 악용하는 방법
  • 안전하지 않은 직렬화가 위험한 이유
  • 이 취약점을 해결할 수 있는 기술입니다.

공격자는 안전하지 않은 직렬화를 어떻게 악용합니까?

요즘 데이터 직렬화에 가장 인기 있는 데이터 형식은 JSON이지만 XML은 두 번째에 가깝습니다. 꽤 많은 프로그래밍 언어는 JSON 또는 XML보다 더 많은 기능을 포함하는 데이터를 직렬화하기 위한 자체 방법을 제공합니다. 어쨌든 개발자가 이 시리즈의 다른 블로그에서 오래된 진언을 따르는 것과 는 달리, "사용자 입력을 신뢰하지 마십시오!"

사용자가 수신 서버에서 실수로 실행할 수 있는 해당 문자열에 코드를 삽입할 수 있으므로 사용자 입력을 신뢰할 수 없습니다. 또한 원시 직렬화된 데이터에 액세스하고 악용할 수 있으므로 신뢰할 수 없는 동일한 범주에 속해야 합니다.

예를 들어 포럼 응용 프로그램이 PHP 개체 직렬화를 사용하여 사용자의 식별 및 역할이 포함된 쿠키를 저장하는 경우 이를 조작할 수 있습니다. 악의적인 사용자가 "사용자" 역할을 대신 "관리자"로 변경할 수 있습니다. 또는 데이터 문자열에서 제공하는 개구부를 사용하여 "신뢰할 수 있는" 데이터를 처리할 때 서버에서 잘못 해석되고 실행할 수 있는 코드를 삽입할 수 있습니다.

안전하지 않은 직렬화가 위험한 이유는 무엇입니까?

이러한 종류의 공격에는 해커의 부분에 약간의 기술이 필요하며 공격자가 조작되고 분류된 데이터에서 서버가 수락할 코드 또는 악용을 배우는 동안 시행 착오도 가 필요합니다. 즉, 이것은 그것을 사용 하 여 충분히 숙련 된 해커에 게 제공 하는 잠재적인 힘 때문에 일반적으로 악용 취약점.

직렬화된 데이터가 어떻게 사용되는지에 따라 이전 블로그에서 다루는 많은 공격을 포함하여 모든 수의 공격을 사용할 수 있습니다. 안전하지 않은 직렬화는 원격 교차 코드 주입, 교차 사이트 스크립팅, 서비스 거부, 액세스 제어 하이재킹 및 물론 SQL 및 XML 주입 공격에 대한 게이트웨이가 될 수 있습니다. 기본적으로 시작 지점을 열고, 모든 데이터를 신뢰할 수 있도록 분류되고 있음을 선언하고, 공격자가 이를 시도하고 악용할 수 있도록 합니다.

안전하지 않은 직렬화 제거

조직이 안전하지 않은 직렬화를 방지하기 위해 할 수 있는 가장 안전한 일은 응용 프로그램이 직렬화된 데이터를 수락하지 못하도록 제한하는 것입니다. 그러나 이러한 종류의 공격을 방어하기 위해 사용할 수있는 다른 기술이 있기 때문에 불가능하거나 현실적이지 않을 수도 있지만 걱정할 필요가 없습니다.

가능하면 데이터를 숫자 값과 같은 것으로 소독할 수 있습니다. 이 완전히 악용을 중지 하지 않을 수 있습니다., 하지만 코드 주입 발생을 방지 할 것 이다. 더 나은 단순히 데이터 문자열이 조작되지 않았는지 확인할 수있는 디지털 서명과 같은 직렬화된 데이터에 대한 무결성 검사의 일종을 요구하는 것입니다. 또한 모든 직렬화 프로세스는 격리되고 낮은 권한 환경에서 실행되어야 합니다.

이러한 보호 기능이 있는 후에는 실패한 모든 직렬화 시도와 데이터를 분류하는 컨테이너 또는 서버에서 오는 네트워크 활동을 기록해야 합니다. 사용자가 로그에서 몇 개 이상의 직렬화 오류를 트리거하는 경우 악의적인 내부자이거나 자격 증명을 해킹하거나 도난당했음을 나타내는 것이 좋습니다. 또한 지속적으로 직렬화 오류를 트리거하는 사용자를 위한 자동 잠금과 같은 것을 고려할 수도 있습니다.

안전하지 않은 직렬화에 대처하기 위해 사용하는 이러한 도구 중 어느 도구든 핵심은 사용자가 만지거나 조작했을 수 있는 데이터임을 기억하십시오. 절대 신뢰하지 마십시오.

알려진 취약점이 있는 구성 요소 사용에 대한 자세한 정보

추가 읽기를 위해, 당신은 OWASP가 안전하지 않은 직렬화에 대해말하는 것을 살펴 볼 수 있습니다. 또한 새로운 방어 지식을 테스트에 넣을 수 있습니다. Secure Code Warrior 사이버 보안 팀이 궁극적인 사이버 전사가 될 수 있도록 하는 플랫폼. 이 취약점을 물리치는 것에 대해 자세히 알아보려면 Secure Code Warrior 블로그.

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

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