
코더들이 보안을 정복하다: Share & Learn 시리즈 - 사이트 간 요청 위조
웹사이트나 애플리케이션 운영자를 정면으로 겨냥한 공격과 달리, 많은 CSRF (Cross-Site Request Forgery) 공격의 목적은 사용자로부터 직접 금전, 상품 또는 자격 증명을 훔치는 것입니다.그렇다고 사이트 운영자가 CSRF 코드 취약점을 무시해야 한다는 의미는 아닙니다. 순수 금전적 공격의 경우 궁극적으로 도난당한 자금을 대체하는 것은 안전하지 않은 코드를 사용하는 호스팅 사이트의 책임일 수 있기 때문입니다.그 대신 대상 사용자가 자격 증명을 분실하거나 자신도 모르게 암호를 변경한 경우, 범죄자는 도난당한 신원을 이용해 큰 피해를 입힐 수 있습니다. 특히 피해자에게 액세스 권한이 있는 경우에는 더욱 그렇습니다.
CSRF 공격은 상당히 복잡하며 성공하려면 여러 계층이 필요합니다.다시 말해 공격자가 제대로 작동하려면 많은 것들이 공격자에게 유리하게 작용해야 합니다.그럼에도 불구하고 공격이 성공하면 해커에게 직접 돈을 송금하거나 해커가 아무런 처벌도 받지 않고 사이트를 이동할 수 있도록 설정할 수 있기 때문에 이들은 매우 인기 있는 공격 매개체입니다.모든 것이 해커의 뜻대로 흘러간다면 공격 대상 사용자는 자신이 공격의 피해자가 되었다는 사실조차 알지 못할 수도 있습니다.
좋은 소식은 CSRF 공격이 제대로 작동하려면 많은 것이 제대로 진행되어야 하기 때문에 CSRF 공격을 막을 수 있는 훌륭한 방어 기술이 많이 있다는 것입니다.
이를 위해 CSRF 공격의 세 가지 주요 측면에 대해 살펴보겠습니다.
- 작동 방식
- 왜 그렇게 위험한가요?
- 추위를 막을 수 있는 방어 시설을 마련하는 방법
CSRF 공격은 어떻게 작동합니까?
CSRF 공격이 성공하면 대상 사용자의 금전, 상품 또는 자격 증명을 직접 훔칠 수 있기 때문에 CSRF 공격을 생성하는 데 많은 노력이 필요함에도 불구하고 인기가 있습니다.또한 다양한 플랫폼에서 시도되는 경우가 많기 때문에 지난 몇 년 동안 다양한 이름과 이름을 갖게 되었습니다.CSRF 공격을 XSRF, Sea Surf, 세션 라이딩, 크로스 사이트 레퍼런스 위조 또는 적대적 링킹이라고 하는 것을 들어보셨을 것입니다.Microsoft는 대부분의 설명서에서 이러한 공격을 원클릭 공격이라고 부르곤 합니다.하지만 모두 CSRF 공격이며 이를 방지하는 방법도 동일합니다.
CSRF 공격은 사용자가 업무를 수행하거나 업무를 수행하는 사이트에 로그인하는 경우 발생할 수 있습니다.핵심은 사용자가 웹 사이트 또는 애플리케이션에 로그인하여 적극적으로 인증을 받아야 한다는 것입니다.공격은 일반적으로 보조 웹 사이트 또는 이메일에서 시작됩니다.공격자는 소셜 엔지니어링 기법을 사용하여 사용자가 이메일에 있는 링크를 클릭하도록 속여 공격 스크립트가 포함된 손상된 웹 사이트로 이동하도록 유도하는 경우가 많습니다.
손상된 웹 사이트에는 활성 브라우저에 명령을 실행하도록 지시하는 스크립트가 포함되어 있습니다. 일반적으로 사용자 암호를 변경하거나 공격자가 제어하는 계정으로 돈을 이체하는 것과 같은 악의적인 동작입니다.사용자가 인증되기만 하면 사이트는 인증된 사용자가 명령을 내린 것으로 간주합니다.왜 안 되는 거죠?사용자는 이미 본인 인증을 완료했으며 사이트에 접속하는 데 필요한 비밀번호를 입력했습니다.심지어 지오펜스 내에 위치하여 사무실 터미널에 제대로 위치해 있을 수도 있습니다.암호를 변경하거나 자금을 이체하려는 경우, 본인이 요청을 했다고 믿지 않을 이유가 없습니다.
공격 요소를 자세히 살펴보면 공격자가 이 공격을 수행하기가 왜 그렇게 어려운지 알 수 있습니다.우선, 공격이 발생한 사이트에서 사용자를 적극적으로 인증해야 합니다.사용자가 브라우저 세션을 종료하거나 로그오프한 후에 공격 스크립트가 포함된 이메일이 수신되면 공격은 실패합니다.
또한 공격자는 대상 사이트에서 어떤 스크립트를 받아들일지 알기 위해 대상 사이트에서 많은 리콘을 수행해야 합니다.공격자는 피해자의 화면을 볼 수 없으며 웹 사이트에서 오는 피드백은 공격자가 아닌 피해자에게 전달됩니다.공격자가 계정에 갑자기 돈이 들어오는 등 공격이 제대로 작동했다는 증거를 볼 수 없다면 공격이 성공했는지조차 바로 알 수 없습니다.
CSRF 공격을 실행하는 코드는 공격 시점에 사용자가 로그인하고 대상 사이트가 어떤 스크립트를 받아들일지 아는 것과 같은 어렵지만 불가능하지는 않은 매개 변수 내에서 사이트 자체에 따라 다르지만 매우 간단할 수 있습니다.
은행이나 금융 애플리케이션이 다음과 같이 GET 요청을 사용하여 돈을 이체한다고 가정해 보겠습니다.
http://bank.com/transferdo?acct=NancySmith12&amount=100 HTTP/1.1 받기
이 코드는 NancySmith12라는 사용자에게 100달러를 이체하라는 요청을 보냅니다.
하지만 타깃 사용자가 동료로부터 온 것처럼 위장한 이메일을 받은 경우 CSRF 공격 스크립트가 클릭 동작에 포함될 수 있습니다.
<a href="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000">이 분기별 보고서를 빠르게 읽을 수 있습니까?<a></a></a>
대상 사용자가 금융 애플리케이션의 브라우저 세션이 아직 열려 있는 동안 소셜 엔지니어링 링크를 보고 링크를 클릭하면 해당 브라우저는 애플리케이션에 ShadyLady15의 계정으로 10만 달러를 송금하도록 요청합니다.
사용자가 볼 수 없는 보이지 않는 이미지에 스크립트를 숨길 수도 있지만 다음과 같이 브라우저가 요청을 하도록 트리거할 수 있습니다.
<img src="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000" width="0" height="0" border="0">
결과는 같습니다.ShadyLady15는 아무도 공격을 탐지하지 못한 채 10만 달러를 받게 됩니다.
CSRF가 왜 그렇게 위험한가요?
CSRF 공격은 랜섬웨어 공격이 계속해서 기승을 부리는 것과 같은 이유로 오늘날 널리 사용되고 있습니다.공격자와 피해자의 돈 사이에 끼어드는 격차가 거의 없습니다.랜섬웨어 공격에서는 시스템이 암호화되고 사용자는 해당 데이터를 해독하는 데 필요한 돈을 갈취합니다.CSRF 공격의 경우 단계가 훨씬 더 줄어듭니다.피해를 입은 피해자는 자신도 모르게 공격자에게 돈을 보내기만 합니다.
CSRF 공격은 피해자의 돈이나 회사의 재정에 대한 직접적인 공격 외에도 유효한 사용자를 사용하여 네트워크를 손상시키는 데 사용될 수 있습니다.공격자가 CSRF 익스플로잇을 사용하여 관리자의 암호를 변경할 수 있다고 상상해 보십시오.이들은 즉시 이 암호를 사용하여 데이터를 도용하거나, 네트워크 방어 시설을 뚫거나, 백도어를 설치할 수 있습니다.
많은 작업이 필요하고 어느 정도 운도 필요하지만 CSRF 공격이 성공하면 해커의 궁극적인 목표와 상관없이 복권에 당첨되는 것과 같을 수 있습니다.네트워크를 공격할 때 거의 모든 종류의 공격에는 SIEM과 사이버 보안 담당자의 감시 범위를 좁히기 위해 몇 달간 느리고 느린 정찰이 필요합니다.반대로 CSRF 공격 한 번으로 사이버 킬 체인의 여러 단계를 건너뛰고 궁극적인 목표에 매우 근접해 시작할 수 있습니다.
CSRF 공격을 중지하려면 어떻게 해야 합니까?
대부분의 취약점과 달리 CSRF 공격의 오류는 코드가 아니라 공격자가 브라우저가 사용자가 원하지 않거나 알지도 못하는 요청을 하도록 하기 위해 만든 익스플로잇에 있습니다.하지만 이러한 위협은 물리칠 수 있습니다.
가장 좋은 방법 중 하나는 새 세션이 생성될 때마다 개발자가 사용자 ID에 CSRF 토큰을 추가하도록 하는 것입니다.고유하고 임의의 문자로 구성된 문자열로 구성되어야 하며 사용자가 볼 수 없어야 합니다.다음으로 CSRF 토큰 요청을 숨겨진 필드로 양식에 추가하여 새 요청이 제출될 때마다 서버에서 확인합니다.사용자의 브라우저를 통해 요청을 제출하는 공격자는 숨겨진 토큰 필드에 대해 알지도 못하며, 숨겨진 토큰 필드가 무엇인지 알아낼 수도 없기 때문에 모든 요청이 실패합니다.
프로그래밍이 많이 필요하지 않은 훨씬 더 쉬운 방법은 암호 변경 요청이나 송금 주문과 같은 민감한 항목에 Captcha 챌린지를 추가하는 것입니다.사용자에게 요청자가 로봇 (이 경우에는 CSRF 스크립트) 이 아님을 확인하는 버튼 하나를 클릭하도록 요청하는 것만큼 간단할 수 있습니다.공격자는 챌린지에 대한 응답을 스크립팅할 수 없으며, 먼저 송금 요청과 같은 작업을 수행하지 않고 갑자기 CAPTCHA 챌린지가 발생한 사용자는 문제가 발생했음을 알 수 있습니다.또는 조직에서 보안이라는 명목으로 작업 속도를 얼마나 늦추고 싶은지에 따라 스마트폰과 같은 타사 토큰을 사용하여 일회성 암호를 생성하는 방법도 있습니다.
마지막으로, 완전하지는 않지만, 마이크로소프트 엣지나 구글 크롬과 같은 많은 브라우저가 현재 사용하고 있습니다. 동일 출처 정책 로컬 사용자를 제외한 모든 사용자의 요청을 차단하기 위한 제한 사항이 있습니다.사용자가 해당 브라우저의 최신 버전을 사용하여 사이트와 상호 작용하도록 하면 개발 팀에 전혀 부담을 주지 않으면서 CSRF 보안을 한 단계 더 구축할 수 있습니다.
CSRF의 문을 닫다
이렇게 높은 보상을 받을 수 있기 때문에 CSRF 공격은 절대 완전히 사라지지 않을 것입니다. 하지만 이러한 공격이 왜 그렇게 지속적인지, 그리고 이러한 공격을 네트워크에서 영원히 차단하는 방법을 배우셨기를 바랍니다.
자세한 내용은 OWASP 사이트 간 요청 위조 방지 치트 시트를 참조하십시오. 이 치트 시트는 이 취약성이 진화함에 따라 기록된 살아있는 문서 역할을 합니다.보안 지식을 더욱 강화하고 싶다면 다음 사이트를 방문하여 이러한 위협과 기타 여러 가지 방법을 배울 수 있습니다. 시큐어 코드 워리어 블로그.
새로운 수비 지식을 시험해 볼 준비가 되셨나요?가지고 놀아보세요 무료 데모 오늘날의 시큐어 코드 워리어 플랫폼의


CSRF 공격은 상당히 복잡하며 성공하려면 여러 계층이 필요합니다.다시 말해 공격자가 제대로 작동하려면 많은 것들이 공격자에게 유리하게 작용해야 합니다.그럼에도 불구하고 이들은 매우 인기 있고 수익성이 높은 공격 벡터입니다.
Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

Secure Code Warrior致力于在整个软件开发生命周期中保护代码,并帮助组织建立将网络安全置于首位的文化。无论您是应用安全管理员、开发人员、首席信息安全官还是任何与安全相关的人员,我们都能协助您的组织降低与不安全代码相关的风险。
预约演示Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。


웹사이트나 애플리케이션 운영자를 정면으로 겨냥한 공격과 달리, 많은 CSRF (Cross-Site Request Forgery) 공격의 목적은 사용자로부터 직접 금전, 상품 또는 자격 증명을 훔치는 것입니다.그렇다고 사이트 운영자가 CSRF 코드 취약점을 무시해야 한다는 의미는 아닙니다. 순수 금전적 공격의 경우 궁극적으로 도난당한 자금을 대체하는 것은 안전하지 않은 코드를 사용하는 호스팅 사이트의 책임일 수 있기 때문입니다.그 대신 대상 사용자가 자격 증명을 분실하거나 자신도 모르게 암호를 변경한 경우, 범죄자는 도난당한 신원을 이용해 큰 피해를 입힐 수 있습니다. 특히 피해자에게 액세스 권한이 있는 경우에는 더욱 그렇습니다.
CSRF 공격은 상당히 복잡하며 성공하려면 여러 계층이 필요합니다.다시 말해 공격자가 제대로 작동하려면 많은 것들이 공격자에게 유리하게 작용해야 합니다.그럼에도 불구하고 공격이 성공하면 해커에게 직접 돈을 송금하거나 해커가 아무런 처벌도 받지 않고 사이트를 이동할 수 있도록 설정할 수 있기 때문에 이들은 매우 인기 있는 공격 매개체입니다.모든 것이 해커의 뜻대로 흘러간다면 공격 대상 사용자는 자신이 공격의 피해자가 되었다는 사실조차 알지 못할 수도 있습니다.
좋은 소식은 CSRF 공격이 제대로 작동하려면 많은 것이 제대로 진행되어야 하기 때문에 CSRF 공격을 막을 수 있는 훌륭한 방어 기술이 많이 있다는 것입니다.
이를 위해 CSRF 공격의 세 가지 주요 측면에 대해 살펴보겠습니다.
- 작동 방식
- 왜 그렇게 위험한가요?
- 추위를 막을 수 있는 방어 시설을 마련하는 방법
CSRF 공격은 어떻게 작동합니까?
CSRF 공격이 성공하면 대상 사용자의 금전, 상품 또는 자격 증명을 직접 훔칠 수 있기 때문에 CSRF 공격을 생성하는 데 많은 노력이 필요함에도 불구하고 인기가 있습니다.또한 다양한 플랫폼에서 시도되는 경우가 많기 때문에 지난 몇 년 동안 다양한 이름과 이름을 갖게 되었습니다.CSRF 공격을 XSRF, Sea Surf, 세션 라이딩, 크로스 사이트 레퍼런스 위조 또는 적대적 링킹이라고 하는 것을 들어보셨을 것입니다.Microsoft는 대부분의 설명서에서 이러한 공격을 원클릭 공격이라고 부르곤 합니다.하지만 모두 CSRF 공격이며 이를 방지하는 방법도 동일합니다.
CSRF 공격은 사용자가 업무를 수행하거나 업무를 수행하는 사이트에 로그인하는 경우 발생할 수 있습니다.핵심은 사용자가 웹 사이트 또는 애플리케이션에 로그인하여 적극적으로 인증을 받아야 한다는 것입니다.공격은 일반적으로 보조 웹 사이트 또는 이메일에서 시작됩니다.공격자는 소셜 엔지니어링 기법을 사용하여 사용자가 이메일에 있는 링크를 클릭하도록 속여 공격 스크립트가 포함된 손상된 웹 사이트로 이동하도록 유도하는 경우가 많습니다.
손상된 웹 사이트에는 활성 브라우저에 명령을 실행하도록 지시하는 스크립트가 포함되어 있습니다. 일반적으로 사용자 암호를 변경하거나 공격자가 제어하는 계정으로 돈을 이체하는 것과 같은 악의적인 동작입니다.사용자가 인증되기만 하면 사이트는 인증된 사용자가 명령을 내린 것으로 간주합니다.왜 안 되는 거죠?사용자는 이미 본인 인증을 완료했으며 사이트에 접속하는 데 필요한 비밀번호를 입력했습니다.심지어 지오펜스 내에 위치하여 사무실 터미널에 제대로 위치해 있을 수도 있습니다.암호를 변경하거나 자금을 이체하려는 경우, 본인이 요청을 했다고 믿지 않을 이유가 없습니다.
공격 요소를 자세히 살펴보면 공격자가 이 공격을 수행하기가 왜 그렇게 어려운지 알 수 있습니다.우선, 공격이 발생한 사이트에서 사용자를 적극적으로 인증해야 합니다.사용자가 브라우저 세션을 종료하거나 로그오프한 후에 공격 스크립트가 포함된 이메일이 수신되면 공격은 실패합니다.
또한 공격자는 대상 사이트에서 어떤 스크립트를 받아들일지 알기 위해 대상 사이트에서 많은 리콘을 수행해야 합니다.공격자는 피해자의 화면을 볼 수 없으며 웹 사이트에서 오는 피드백은 공격자가 아닌 피해자에게 전달됩니다.공격자가 계정에 갑자기 돈이 들어오는 등 공격이 제대로 작동했다는 증거를 볼 수 없다면 공격이 성공했는지조차 바로 알 수 없습니다.
CSRF 공격을 실행하는 코드는 공격 시점에 사용자가 로그인하고 대상 사이트가 어떤 스크립트를 받아들일지 아는 것과 같은 어렵지만 불가능하지는 않은 매개 변수 내에서 사이트 자체에 따라 다르지만 매우 간단할 수 있습니다.
은행이나 금융 애플리케이션이 다음과 같이 GET 요청을 사용하여 돈을 이체한다고 가정해 보겠습니다.
http://bank.com/transferdo?acct=NancySmith12&amount=100 HTTP/1.1 받기
이 코드는 NancySmith12라는 사용자에게 100달러를 이체하라는 요청을 보냅니다.
하지만 타깃 사용자가 동료로부터 온 것처럼 위장한 이메일을 받은 경우 CSRF 공격 스크립트가 클릭 동작에 포함될 수 있습니다.
<a href="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000">이 분기별 보고서를 빠르게 읽을 수 있습니까?<a></a></a>
대상 사용자가 금융 애플리케이션의 브라우저 세션이 아직 열려 있는 동안 소셜 엔지니어링 링크를 보고 링크를 클릭하면 해당 브라우저는 애플리케이션에 ShadyLady15의 계정으로 10만 달러를 송금하도록 요청합니다.
사용자가 볼 수 없는 보이지 않는 이미지에 스크립트를 숨길 수도 있지만 다음과 같이 브라우저가 요청을 하도록 트리거할 수 있습니다.
<img src="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000" width="0" height="0" border="0">
결과는 같습니다.ShadyLady15는 아무도 공격을 탐지하지 못한 채 10만 달러를 받게 됩니다.
CSRF가 왜 그렇게 위험한가요?
CSRF 공격은 랜섬웨어 공격이 계속해서 기승을 부리는 것과 같은 이유로 오늘날 널리 사용되고 있습니다.공격자와 피해자의 돈 사이에 끼어드는 격차가 거의 없습니다.랜섬웨어 공격에서는 시스템이 암호화되고 사용자는 해당 데이터를 해독하는 데 필요한 돈을 갈취합니다.CSRF 공격의 경우 단계가 훨씬 더 줄어듭니다.피해를 입은 피해자는 자신도 모르게 공격자에게 돈을 보내기만 합니다.
CSRF 공격은 피해자의 돈이나 회사의 재정에 대한 직접적인 공격 외에도 유효한 사용자를 사용하여 네트워크를 손상시키는 데 사용될 수 있습니다.공격자가 CSRF 익스플로잇을 사용하여 관리자의 암호를 변경할 수 있다고 상상해 보십시오.이들은 즉시 이 암호를 사용하여 데이터를 도용하거나, 네트워크 방어 시설을 뚫거나, 백도어를 설치할 수 있습니다.
많은 작업이 필요하고 어느 정도 운도 필요하지만 CSRF 공격이 성공하면 해커의 궁극적인 목표와 상관없이 복권에 당첨되는 것과 같을 수 있습니다.네트워크를 공격할 때 거의 모든 종류의 공격에는 SIEM과 사이버 보안 담당자의 감시 범위를 좁히기 위해 몇 달간 느리고 느린 정찰이 필요합니다.반대로 CSRF 공격 한 번으로 사이버 킬 체인의 여러 단계를 건너뛰고 궁극적인 목표에 매우 근접해 시작할 수 있습니다.
CSRF 공격을 중지하려면 어떻게 해야 합니까?
대부분의 취약점과 달리 CSRF 공격의 오류는 코드가 아니라 공격자가 브라우저가 사용자가 원하지 않거나 알지도 못하는 요청을 하도록 하기 위해 만든 익스플로잇에 있습니다.하지만 이러한 위협은 물리칠 수 있습니다.
가장 좋은 방법 중 하나는 새 세션이 생성될 때마다 개발자가 사용자 ID에 CSRF 토큰을 추가하도록 하는 것입니다.고유하고 임의의 문자로 구성된 문자열로 구성되어야 하며 사용자가 볼 수 없어야 합니다.다음으로 CSRF 토큰 요청을 숨겨진 필드로 양식에 추가하여 새 요청이 제출될 때마다 서버에서 확인합니다.사용자의 브라우저를 통해 요청을 제출하는 공격자는 숨겨진 토큰 필드에 대해 알지도 못하며, 숨겨진 토큰 필드가 무엇인지 알아낼 수도 없기 때문에 모든 요청이 실패합니다.
프로그래밍이 많이 필요하지 않은 훨씬 더 쉬운 방법은 암호 변경 요청이나 송금 주문과 같은 민감한 항목에 Captcha 챌린지를 추가하는 것입니다.사용자에게 요청자가 로봇 (이 경우에는 CSRF 스크립트) 이 아님을 확인하는 버튼 하나를 클릭하도록 요청하는 것만큼 간단할 수 있습니다.공격자는 챌린지에 대한 응답을 스크립팅할 수 없으며, 먼저 송금 요청과 같은 작업을 수행하지 않고 갑자기 CAPTCHA 챌린지가 발생한 사용자는 문제가 발생했음을 알 수 있습니다.또는 조직에서 보안이라는 명목으로 작업 속도를 얼마나 늦추고 싶은지에 따라 스마트폰과 같은 타사 토큰을 사용하여 일회성 암호를 생성하는 방법도 있습니다.
마지막으로, 완전하지는 않지만, 마이크로소프트 엣지나 구글 크롬과 같은 많은 브라우저가 현재 사용하고 있습니다. 동일 출처 정책 로컬 사용자를 제외한 모든 사용자의 요청을 차단하기 위한 제한 사항이 있습니다.사용자가 해당 브라우저의 최신 버전을 사용하여 사이트와 상호 작용하도록 하면 개발 팀에 전혀 부담을 주지 않으면서 CSRF 보안을 한 단계 더 구축할 수 있습니다.
CSRF의 문을 닫다
이렇게 높은 보상을 받을 수 있기 때문에 CSRF 공격은 절대 완전히 사라지지 않을 것입니다. 하지만 이러한 공격이 왜 그렇게 지속적인지, 그리고 이러한 공격을 네트워크에서 영원히 차단하는 방법을 배우셨기를 바랍니다.
자세한 내용은 OWASP 사이트 간 요청 위조 방지 치트 시트를 참조하십시오. 이 치트 시트는 이 취약성이 진화함에 따라 기록된 살아있는 문서 역할을 합니다.보안 지식을 더욱 강화하고 싶다면 다음 사이트를 방문하여 이러한 위협과 기타 여러 가지 방법을 배울 수 있습니다. 시큐어 코드 워리어 블로그.
새로운 수비 지식을 시험해 볼 준비가 되셨나요?가지고 놀아보세요 무료 데모 오늘날의 시큐어 코드 워리어 플랫폼의

웹사이트나 애플리케이션 운영자를 정면으로 겨냥한 공격과 달리, 많은 CSRF (Cross-Site Request Forgery) 공격의 목적은 사용자로부터 직접 금전, 상품 또는 자격 증명을 훔치는 것입니다.그렇다고 사이트 운영자가 CSRF 코드 취약점을 무시해야 한다는 의미는 아닙니다. 순수 금전적 공격의 경우 궁극적으로 도난당한 자금을 대체하는 것은 안전하지 않은 코드를 사용하는 호스팅 사이트의 책임일 수 있기 때문입니다.그 대신 대상 사용자가 자격 증명을 분실하거나 자신도 모르게 암호를 변경한 경우, 범죄자는 도난당한 신원을 이용해 큰 피해를 입힐 수 있습니다. 특히 피해자에게 액세스 권한이 있는 경우에는 더욱 그렇습니다.
CSRF 공격은 상당히 복잡하며 성공하려면 여러 계층이 필요합니다.다시 말해 공격자가 제대로 작동하려면 많은 것들이 공격자에게 유리하게 작용해야 합니다.그럼에도 불구하고 공격이 성공하면 해커에게 직접 돈을 송금하거나 해커가 아무런 처벌도 받지 않고 사이트를 이동할 수 있도록 설정할 수 있기 때문에 이들은 매우 인기 있는 공격 매개체입니다.모든 것이 해커의 뜻대로 흘러간다면 공격 대상 사용자는 자신이 공격의 피해자가 되었다는 사실조차 알지 못할 수도 있습니다.
좋은 소식은 CSRF 공격이 제대로 작동하려면 많은 것이 제대로 진행되어야 하기 때문에 CSRF 공격을 막을 수 있는 훌륭한 방어 기술이 많이 있다는 것입니다.
이를 위해 CSRF 공격의 세 가지 주요 측면에 대해 살펴보겠습니다.
- 작동 방식
- 왜 그렇게 위험한가요?
- 추위를 막을 수 있는 방어 시설을 마련하는 방법
CSRF 공격은 어떻게 작동합니까?
CSRF 공격이 성공하면 대상 사용자의 금전, 상품 또는 자격 증명을 직접 훔칠 수 있기 때문에 CSRF 공격을 생성하는 데 많은 노력이 필요함에도 불구하고 인기가 있습니다.또한 다양한 플랫폼에서 시도되는 경우가 많기 때문에 지난 몇 년 동안 다양한 이름과 이름을 갖게 되었습니다.CSRF 공격을 XSRF, Sea Surf, 세션 라이딩, 크로스 사이트 레퍼런스 위조 또는 적대적 링킹이라고 하는 것을 들어보셨을 것입니다.Microsoft는 대부분의 설명서에서 이러한 공격을 원클릭 공격이라고 부르곤 합니다.하지만 모두 CSRF 공격이며 이를 방지하는 방법도 동일합니다.
CSRF 공격은 사용자가 업무를 수행하거나 업무를 수행하는 사이트에 로그인하는 경우 발생할 수 있습니다.핵심은 사용자가 웹 사이트 또는 애플리케이션에 로그인하여 적극적으로 인증을 받아야 한다는 것입니다.공격은 일반적으로 보조 웹 사이트 또는 이메일에서 시작됩니다.공격자는 소셜 엔지니어링 기법을 사용하여 사용자가 이메일에 있는 링크를 클릭하도록 속여 공격 스크립트가 포함된 손상된 웹 사이트로 이동하도록 유도하는 경우가 많습니다.
손상된 웹 사이트에는 활성 브라우저에 명령을 실행하도록 지시하는 스크립트가 포함되어 있습니다. 일반적으로 사용자 암호를 변경하거나 공격자가 제어하는 계정으로 돈을 이체하는 것과 같은 악의적인 동작입니다.사용자가 인증되기만 하면 사이트는 인증된 사용자가 명령을 내린 것으로 간주합니다.왜 안 되는 거죠?사용자는 이미 본인 인증을 완료했으며 사이트에 접속하는 데 필요한 비밀번호를 입력했습니다.심지어 지오펜스 내에 위치하여 사무실 터미널에 제대로 위치해 있을 수도 있습니다.암호를 변경하거나 자금을 이체하려는 경우, 본인이 요청을 했다고 믿지 않을 이유가 없습니다.
공격 요소를 자세히 살펴보면 공격자가 이 공격을 수행하기가 왜 그렇게 어려운지 알 수 있습니다.우선, 공격이 발생한 사이트에서 사용자를 적극적으로 인증해야 합니다.사용자가 브라우저 세션을 종료하거나 로그오프한 후에 공격 스크립트가 포함된 이메일이 수신되면 공격은 실패합니다.
또한 공격자는 대상 사이트에서 어떤 스크립트를 받아들일지 알기 위해 대상 사이트에서 많은 리콘을 수행해야 합니다.공격자는 피해자의 화면을 볼 수 없으며 웹 사이트에서 오는 피드백은 공격자가 아닌 피해자에게 전달됩니다.공격자가 계정에 갑자기 돈이 들어오는 등 공격이 제대로 작동했다는 증거를 볼 수 없다면 공격이 성공했는지조차 바로 알 수 없습니다.
CSRF 공격을 실행하는 코드는 공격 시점에 사용자가 로그인하고 대상 사이트가 어떤 스크립트를 받아들일지 아는 것과 같은 어렵지만 불가능하지는 않은 매개 변수 내에서 사이트 자체에 따라 다르지만 매우 간단할 수 있습니다.
은행이나 금융 애플리케이션이 다음과 같이 GET 요청을 사용하여 돈을 이체한다고 가정해 보겠습니다.
http://bank.com/transferdo?acct=NancySmith12&amount=100 HTTP/1.1 받기
이 코드는 NancySmith12라는 사용자에게 100달러를 이체하라는 요청을 보냅니다.
하지만 타깃 사용자가 동료로부터 온 것처럼 위장한 이메일을 받은 경우 CSRF 공격 스크립트가 클릭 동작에 포함될 수 있습니다.
<a href="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000">이 분기별 보고서를 빠르게 읽을 수 있습니까?<a></a></a>
대상 사용자가 금융 애플리케이션의 브라우저 세션이 아직 열려 있는 동안 소셜 엔지니어링 링크를 보고 링크를 클릭하면 해당 브라우저는 애플리케이션에 ShadyLady15의 계정으로 10만 달러를 송금하도록 요청합니다.
사용자가 볼 수 없는 보이지 않는 이미지에 스크립트를 숨길 수도 있지만 다음과 같이 브라우저가 요청을 하도록 트리거할 수 있습니다.
<img src="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000" width="0" height="0" border="0">
결과는 같습니다.ShadyLady15는 아무도 공격을 탐지하지 못한 채 10만 달러를 받게 됩니다.
CSRF가 왜 그렇게 위험한가요?
CSRF 공격은 랜섬웨어 공격이 계속해서 기승을 부리는 것과 같은 이유로 오늘날 널리 사용되고 있습니다.공격자와 피해자의 돈 사이에 끼어드는 격차가 거의 없습니다.랜섬웨어 공격에서는 시스템이 암호화되고 사용자는 해당 데이터를 해독하는 데 필요한 돈을 갈취합니다.CSRF 공격의 경우 단계가 훨씬 더 줄어듭니다.피해를 입은 피해자는 자신도 모르게 공격자에게 돈을 보내기만 합니다.
CSRF 공격은 피해자의 돈이나 회사의 재정에 대한 직접적인 공격 외에도 유효한 사용자를 사용하여 네트워크를 손상시키는 데 사용될 수 있습니다.공격자가 CSRF 익스플로잇을 사용하여 관리자의 암호를 변경할 수 있다고 상상해 보십시오.이들은 즉시 이 암호를 사용하여 데이터를 도용하거나, 네트워크 방어 시설을 뚫거나, 백도어를 설치할 수 있습니다.
많은 작업이 필요하고 어느 정도 운도 필요하지만 CSRF 공격이 성공하면 해커의 궁극적인 목표와 상관없이 복권에 당첨되는 것과 같을 수 있습니다.네트워크를 공격할 때 거의 모든 종류의 공격에는 SIEM과 사이버 보안 담당자의 감시 범위를 좁히기 위해 몇 달간 느리고 느린 정찰이 필요합니다.반대로 CSRF 공격 한 번으로 사이버 킬 체인의 여러 단계를 건너뛰고 궁극적인 목표에 매우 근접해 시작할 수 있습니다.
CSRF 공격을 중지하려면 어떻게 해야 합니까?
대부분의 취약점과 달리 CSRF 공격의 오류는 코드가 아니라 공격자가 브라우저가 사용자가 원하지 않거나 알지도 못하는 요청을 하도록 하기 위해 만든 익스플로잇에 있습니다.하지만 이러한 위협은 물리칠 수 있습니다.
가장 좋은 방법 중 하나는 새 세션이 생성될 때마다 개발자가 사용자 ID에 CSRF 토큰을 추가하도록 하는 것입니다.고유하고 임의의 문자로 구성된 문자열로 구성되어야 하며 사용자가 볼 수 없어야 합니다.다음으로 CSRF 토큰 요청을 숨겨진 필드로 양식에 추가하여 새 요청이 제출될 때마다 서버에서 확인합니다.사용자의 브라우저를 통해 요청을 제출하는 공격자는 숨겨진 토큰 필드에 대해 알지도 못하며, 숨겨진 토큰 필드가 무엇인지 알아낼 수도 없기 때문에 모든 요청이 실패합니다.
프로그래밍이 많이 필요하지 않은 훨씬 더 쉬운 방법은 암호 변경 요청이나 송금 주문과 같은 민감한 항목에 Captcha 챌린지를 추가하는 것입니다.사용자에게 요청자가 로봇 (이 경우에는 CSRF 스크립트) 이 아님을 확인하는 버튼 하나를 클릭하도록 요청하는 것만큼 간단할 수 있습니다.공격자는 챌린지에 대한 응답을 스크립팅할 수 없으며, 먼저 송금 요청과 같은 작업을 수행하지 않고 갑자기 CAPTCHA 챌린지가 발생한 사용자는 문제가 발생했음을 알 수 있습니다.또는 조직에서 보안이라는 명목으로 작업 속도를 얼마나 늦추고 싶은지에 따라 스마트폰과 같은 타사 토큰을 사용하여 일회성 암호를 생성하는 방법도 있습니다.
마지막으로, 완전하지는 않지만, 마이크로소프트 엣지나 구글 크롬과 같은 많은 브라우저가 현재 사용하고 있습니다. 동일 출처 정책 로컬 사용자를 제외한 모든 사용자의 요청을 차단하기 위한 제한 사항이 있습니다.사용자가 해당 브라우저의 최신 버전을 사용하여 사이트와 상호 작용하도록 하면 개발 팀에 전혀 부담을 주지 않으면서 CSRF 보안을 한 단계 더 구축할 수 있습니다.
CSRF의 문을 닫다
이렇게 높은 보상을 받을 수 있기 때문에 CSRF 공격은 절대 완전히 사라지지 않을 것입니다. 하지만 이러한 공격이 왜 그렇게 지속적인지, 그리고 이러한 공격을 네트워크에서 영원히 차단하는 방법을 배우셨기를 바랍니다.
자세한 내용은 OWASP 사이트 간 요청 위조 방지 치트 시트를 참조하십시오. 이 치트 시트는 이 취약성이 진화함에 따라 기록된 살아있는 문서 역할을 합니다.보안 지식을 더욱 강화하고 싶다면 다음 사이트를 방문하여 이러한 위협과 기타 여러 가지 방법을 배울 수 있습니다. 시큐어 코드 워리어 블로그.
새로운 수비 지식을 시험해 볼 준비가 되셨나요?가지고 놀아보세요 무료 데모 오늘날의 시큐어 코드 워리어 플랫폼의
웹사이트나 애플리케이션 운영자를 정면으로 겨냥한 공격과 달리, 많은 CSRF (Cross-Site Request Forgery) 공격의 목적은 사용자로부터 직접 금전, 상품 또는 자격 증명을 훔치는 것입니다.그렇다고 사이트 운영자가 CSRF 코드 취약점을 무시해야 한다는 의미는 아닙니다. 순수 금전적 공격의 경우 궁극적으로 도난당한 자금을 대체하는 것은 안전하지 않은 코드를 사용하는 호스팅 사이트의 책임일 수 있기 때문입니다.그 대신 대상 사용자가 자격 증명을 분실하거나 자신도 모르게 암호를 변경한 경우, 범죄자는 도난당한 신원을 이용해 큰 피해를 입힐 수 있습니다. 특히 피해자에게 액세스 권한이 있는 경우에는 더욱 그렇습니다.
CSRF 공격은 상당히 복잡하며 성공하려면 여러 계층이 필요합니다.다시 말해 공격자가 제대로 작동하려면 많은 것들이 공격자에게 유리하게 작용해야 합니다.그럼에도 불구하고 공격이 성공하면 해커에게 직접 돈을 송금하거나 해커가 아무런 처벌도 받지 않고 사이트를 이동할 수 있도록 설정할 수 있기 때문에 이들은 매우 인기 있는 공격 매개체입니다.모든 것이 해커의 뜻대로 흘러간다면 공격 대상 사용자는 자신이 공격의 피해자가 되었다는 사실조차 알지 못할 수도 있습니다.
좋은 소식은 CSRF 공격이 제대로 작동하려면 많은 것이 제대로 진행되어야 하기 때문에 CSRF 공격을 막을 수 있는 훌륭한 방어 기술이 많이 있다는 것입니다.
이를 위해 CSRF 공격의 세 가지 주요 측면에 대해 살펴보겠습니다.
- 작동 방식
- 왜 그렇게 위험한가요?
- 추위를 막을 수 있는 방어 시설을 마련하는 방법
CSRF 공격은 어떻게 작동합니까?
CSRF 공격이 성공하면 대상 사용자의 금전, 상품 또는 자격 증명을 직접 훔칠 수 있기 때문에 CSRF 공격을 생성하는 데 많은 노력이 필요함에도 불구하고 인기가 있습니다.또한 다양한 플랫폼에서 시도되는 경우가 많기 때문에 지난 몇 년 동안 다양한 이름과 이름을 갖게 되었습니다.CSRF 공격을 XSRF, Sea Surf, 세션 라이딩, 크로스 사이트 레퍼런스 위조 또는 적대적 링킹이라고 하는 것을 들어보셨을 것입니다.Microsoft는 대부분의 설명서에서 이러한 공격을 원클릭 공격이라고 부르곤 합니다.하지만 모두 CSRF 공격이며 이를 방지하는 방법도 동일합니다.
CSRF 공격은 사용자가 업무를 수행하거나 업무를 수행하는 사이트에 로그인하는 경우 발생할 수 있습니다.핵심은 사용자가 웹 사이트 또는 애플리케이션에 로그인하여 적극적으로 인증을 받아야 한다는 것입니다.공격은 일반적으로 보조 웹 사이트 또는 이메일에서 시작됩니다.공격자는 소셜 엔지니어링 기법을 사용하여 사용자가 이메일에 있는 링크를 클릭하도록 속여 공격 스크립트가 포함된 손상된 웹 사이트로 이동하도록 유도하는 경우가 많습니다.
손상된 웹 사이트에는 활성 브라우저에 명령을 실행하도록 지시하는 스크립트가 포함되어 있습니다. 일반적으로 사용자 암호를 변경하거나 공격자가 제어하는 계정으로 돈을 이체하는 것과 같은 악의적인 동작입니다.사용자가 인증되기만 하면 사이트는 인증된 사용자가 명령을 내린 것으로 간주합니다.왜 안 되는 거죠?사용자는 이미 본인 인증을 완료했으며 사이트에 접속하는 데 필요한 비밀번호를 입력했습니다.심지어 지오펜스 내에 위치하여 사무실 터미널에 제대로 위치해 있을 수도 있습니다.암호를 변경하거나 자금을 이체하려는 경우, 본인이 요청을 했다고 믿지 않을 이유가 없습니다.
공격 요소를 자세히 살펴보면 공격자가 이 공격을 수행하기가 왜 그렇게 어려운지 알 수 있습니다.우선, 공격이 발생한 사이트에서 사용자를 적극적으로 인증해야 합니다.사용자가 브라우저 세션을 종료하거나 로그오프한 후에 공격 스크립트가 포함된 이메일이 수신되면 공격은 실패합니다.
또한 공격자는 대상 사이트에서 어떤 스크립트를 받아들일지 알기 위해 대상 사이트에서 많은 리콘을 수행해야 합니다.공격자는 피해자의 화면을 볼 수 없으며 웹 사이트에서 오는 피드백은 공격자가 아닌 피해자에게 전달됩니다.공격자가 계정에 갑자기 돈이 들어오는 등 공격이 제대로 작동했다는 증거를 볼 수 없다면 공격이 성공했는지조차 바로 알 수 없습니다.
CSRF 공격을 실행하는 코드는 공격 시점에 사용자가 로그인하고 대상 사이트가 어떤 스크립트를 받아들일지 아는 것과 같은 어렵지만 불가능하지는 않은 매개 변수 내에서 사이트 자체에 따라 다르지만 매우 간단할 수 있습니다.
은행이나 금융 애플리케이션이 다음과 같이 GET 요청을 사용하여 돈을 이체한다고 가정해 보겠습니다.
http://bank.com/transferdo?acct=NancySmith12&amount=100 HTTP/1.1 받기
이 코드는 NancySmith12라는 사용자에게 100달러를 이체하라는 요청을 보냅니다.
하지만 타깃 사용자가 동료로부터 온 것처럼 위장한 이메일을 받은 경우 CSRF 공격 스크립트가 클릭 동작에 포함될 수 있습니다.
<a href="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000">이 분기별 보고서를 빠르게 읽을 수 있습니까?<a></a></a>
대상 사용자가 금융 애플리케이션의 브라우저 세션이 아직 열려 있는 동안 소셜 엔지니어링 링크를 보고 링크를 클릭하면 해당 브라우저는 애플리케이션에 ShadyLady15의 계정으로 10만 달러를 송금하도록 요청합니다.
사용자가 볼 수 없는 보이지 않는 이미지에 스크립트를 숨길 수도 있지만 다음과 같이 브라우저가 요청을 하도록 트리거할 수 있습니다.
<img src="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000" width="0" height="0" border="0">
결과는 같습니다.ShadyLady15는 아무도 공격을 탐지하지 못한 채 10만 달러를 받게 됩니다.
CSRF가 왜 그렇게 위험한가요?
CSRF 공격은 랜섬웨어 공격이 계속해서 기승을 부리는 것과 같은 이유로 오늘날 널리 사용되고 있습니다.공격자와 피해자의 돈 사이에 끼어드는 격차가 거의 없습니다.랜섬웨어 공격에서는 시스템이 암호화되고 사용자는 해당 데이터를 해독하는 데 필요한 돈을 갈취합니다.CSRF 공격의 경우 단계가 훨씬 더 줄어듭니다.피해를 입은 피해자는 자신도 모르게 공격자에게 돈을 보내기만 합니다.
CSRF 공격은 피해자의 돈이나 회사의 재정에 대한 직접적인 공격 외에도 유효한 사용자를 사용하여 네트워크를 손상시키는 데 사용될 수 있습니다.공격자가 CSRF 익스플로잇을 사용하여 관리자의 암호를 변경할 수 있다고 상상해 보십시오.이들은 즉시 이 암호를 사용하여 데이터를 도용하거나, 네트워크 방어 시설을 뚫거나, 백도어를 설치할 수 있습니다.
많은 작업이 필요하고 어느 정도 운도 필요하지만 CSRF 공격이 성공하면 해커의 궁극적인 목표와 상관없이 복권에 당첨되는 것과 같을 수 있습니다.네트워크를 공격할 때 거의 모든 종류의 공격에는 SIEM과 사이버 보안 담당자의 감시 범위를 좁히기 위해 몇 달간 느리고 느린 정찰이 필요합니다.반대로 CSRF 공격 한 번으로 사이버 킬 체인의 여러 단계를 건너뛰고 궁극적인 목표에 매우 근접해 시작할 수 있습니다.
CSRF 공격을 중지하려면 어떻게 해야 합니까?
대부분의 취약점과 달리 CSRF 공격의 오류는 코드가 아니라 공격자가 브라우저가 사용자가 원하지 않거나 알지도 못하는 요청을 하도록 하기 위해 만든 익스플로잇에 있습니다.하지만 이러한 위협은 물리칠 수 있습니다.
가장 좋은 방법 중 하나는 새 세션이 생성될 때마다 개발자가 사용자 ID에 CSRF 토큰을 추가하도록 하는 것입니다.고유하고 임의의 문자로 구성된 문자열로 구성되어야 하며 사용자가 볼 수 없어야 합니다.다음으로 CSRF 토큰 요청을 숨겨진 필드로 양식에 추가하여 새 요청이 제출될 때마다 서버에서 확인합니다.사용자의 브라우저를 통해 요청을 제출하는 공격자는 숨겨진 토큰 필드에 대해 알지도 못하며, 숨겨진 토큰 필드가 무엇인지 알아낼 수도 없기 때문에 모든 요청이 실패합니다.
프로그래밍이 많이 필요하지 않은 훨씬 더 쉬운 방법은 암호 변경 요청이나 송금 주문과 같은 민감한 항목에 Captcha 챌린지를 추가하는 것입니다.사용자에게 요청자가 로봇 (이 경우에는 CSRF 스크립트) 이 아님을 확인하는 버튼 하나를 클릭하도록 요청하는 것만큼 간단할 수 있습니다.공격자는 챌린지에 대한 응답을 스크립팅할 수 없으며, 먼저 송금 요청과 같은 작업을 수행하지 않고 갑자기 CAPTCHA 챌린지가 발생한 사용자는 문제가 발생했음을 알 수 있습니다.또는 조직에서 보안이라는 명목으로 작업 속도를 얼마나 늦추고 싶은지에 따라 스마트폰과 같은 타사 토큰을 사용하여 일회성 암호를 생성하는 방법도 있습니다.
마지막으로, 완전하지는 않지만, 마이크로소프트 엣지나 구글 크롬과 같은 많은 브라우저가 현재 사용하고 있습니다. 동일 출처 정책 로컬 사용자를 제외한 모든 사용자의 요청을 차단하기 위한 제한 사항이 있습니다.사용자가 해당 브라우저의 최신 버전을 사용하여 사이트와 상호 작용하도록 하면 개발 팀에 전혀 부담을 주지 않으면서 CSRF 보안을 한 단계 더 구축할 수 있습니다.
CSRF의 문을 닫다
이렇게 높은 보상을 받을 수 있기 때문에 CSRF 공격은 절대 완전히 사라지지 않을 것입니다. 하지만 이러한 공격이 왜 그렇게 지속적인지, 그리고 이러한 공격을 네트워크에서 영원히 차단하는 방법을 배우셨기를 바랍니다.
자세한 내용은 OWASP 사이트 간 요청 위조 방지 치트 시트를 참조하십시오. 이 치트 시트는 이 취약성이 진화함에 따라 기록된 살아있는 문서 역할을 합니다.보안 지식을 더욱 강화하고 싶다면 다음 사이트를 방문하여 이러한 위협과 기타 여러 가지 방법을 배울 수 있습니다. 시큐어 코드 워리어 블로그.




%20(1).avif)
.avif)
