우리가 보호하는 것을 잊은 보이지 않는 계층
대부분의 사람들은 웹3.0 보안에 대해 이야기할 때 보통 스마트 컨트랙트를 떠올립니다. 이는 일리가 있습니다. 이러한 코드 조각은 실제 자산을 보관하고 프로토콜 로직을 정의하며 수십억 달러의 사용자 자금을 보호합니다. 수년 동안 보안팀은 재진입 취약점, 접근 제어 문제, 산술적 오류, 특정 실행 경로에서만 발생하는 미묘한 취약점을 발견하는 데 무한한 노력을 기울여 왔습니다. 하지만 체인에서 일어나는 일에 집착하다 보니 대다수의 사용자가 실제로 가장 먼저 접하는 프론트엔드에 대한 관심은 사라졌습니다.
프론트엔드는 항상 사용자가 블록체인과 대화하는 데 도움이 되는 인터페이스인 반짝이는 껍질로 여겨져 왔습니다. 그러나 이 '셸'은 전체 생태계에서 가장 악용되는 계층 중 하나가 되고 있습니다. 스마트 컨트랙트는 불변하고 감사할 수 있지만, 프런트엔드는 변경 가능하고 중앙 집중화되어 있으며 블록체인의 보장 범위를 완전히 벗어난 인프라에 의해 서비스됩니다. 그러나 지갑에서 사용자가 서명해야 하는 트랜잭션 페이로드를 구축하는 것은 바로 프런트엔드입니다. 이것이 두렵지 않으시다면 걱정하지 않으셔도 됩니다.
인터페이스를 신뢰한다는 것은 공격자를 신뢰한다는 의미
프론트엔드에서 진짜 위험은 기술적 복잡성이 아니라 잘못된 잘못된 신뢰입니다. 대부분의 사용자는 거래를 확인할 때 자신이 실제로 무엇을 서명하는지 전혀 알지 못합니다. 그들은 프런트엔드에서 보여주는 내용에 전적으로 의존합니다.
'스왑' 버튼이 승인을 트리거할 수 있습니다. 스테이킹 인터페이스가 위임자 호출을 전달하고 있을 수 있습니다. 지갑이 사람이 읽을 수 있는 형식으로 데이터를 디코딩하지 않는 한(아직 많은 지갑이 그렇게 하지 않습니다), 사용자는 자신이 무엇을 하고 있는지 확인할 수 없습니다.
이 때문에 프론트엔드 침입은 Web3에서 돈을 훔치는 가장 효과적인 방법 중 하나입니다. 공격자는 계약을 위반하거나 핵심 프로토콜의 취약점을 찾을 필요가 없습니다. 일시적으로라도 프런트엔드를 변조할 방법만 있으면 사용자와 블록체인 사이에 보이지 않게 숨어들 수 있습니다. 모든 클릭이 의도를 탈취할 수 있는 기회가 됩니다.
이러한 공격이 발생하는 방법
이러한 공격이 실행되는 방식에는 특별한 것이 없습니다. 공격자가 프로젝트의 도메인 레코드에 액세스하여 악성 서버를 가리키는 DNS 하이재킹처럼 간단한 경우도 있습니다. 다른 경우에는 공격자가 감염된 종속성을 통해 코드를 삽입하고, 악성 로직을 대체하고, 트랜잭션 데이터를 수정한 후 지갑에 전달합니다. 또 다른 경우에는 공격자가 클라우드 대시보드 또는 CDN 구성에 액세스하여 프론트엔드가 직접 손상되어 공격자가 실시간으로 UI 스크립트를 변경할 수 있게 되었습니다.
결과는 항상 동일합니다. 사용자는 평소처럼 앱에 액세스하여 지갑에 연결하고 안전한 거래라고 생각되는 항목에 서명합니다. 하지만 일반적으로 신뢰할 수 없는 계약을 승인하거나 공격자가 제어하는 지갑으로 토큰을 전송하는 등 완전히 다른 서명을 하게 됩니다. 블록체인은 서명된 대로 정확하게 작동하기 때문에 실행 취소 버튼이 없습니다.
이를 증명하는 최근의 사건
우리는 이에 대한 고통스러운 사례를 몇 가지 보아왔습니다. 가장 유명한 사례 중 하나는 공격자가 Curve의 DNS를 장악하여 사용자에게 가짜 프런트엔드를 제공한 2022년의 Curve Finance 사건입니다. 사이트는 완전히 똑같아 보였습니다. 지갑 알림도 정상적으로 보였습니다. 하지만 뒤에서는 모든 거래가 공격자의 지갑으로 라우팅되고 있었습니다. 불과 몇 시간 만에 거의 60만 달러가 손실되었습니다.
또 다른 예로 BadgerDAO가 있습니다. 는 공격자가 악성 자바스크립트를 프론트엔드에 삽입한 후 1억 달러 이상의 손실을 입었습니다. 이 코드는 특정 사용자(특히 고래)의 트랜잭션 페이로드를 조용히 변경하여 해당 사용자가 스스로 클릭을 통해 파괴되도록 했습니다.
이러한 이벤트의 공통점은 스마트 컨트랙트가 그대로 유지된다는 것입니다. 로직은 건전하고 감사는 깨끗하지만 프론트엔드에서 다른 이야기를 하면 모두 무의미해집니다.
이 문제가 사라지지 않는 이유
웹3에서 프론트엔드 보안이 특히 어려운 이유는 이상한 회색 영역에 속하기 때문입니다. 영역에 속하기 때문입니다. 체인 아래쪽에 있기 때문에 대부분의 상위 보안 도구는 이를 모니터링할 수 없습니다. 특히 보안보다 전송을 우선시하는 프로젝트에서는 감사 중에 간과되는 경우가 많습니다. 또한 DNS, 클라우드 스토리지, JavaScript 패키지 레지스트리와 같은 중앙 집중식 인프라에 크게 의존하는데, 이 중 어느 것도 블록체인과 같은 수준의 보증을 제공하지 못합니다.
더 큰 문제는 프론트엔드 유효성 검사 관련 도구가 아직 미숙하다는 점입니다. 온체인에서 검증할 수 있는 컨트랙트 바이트코드와 달리 프론트엔드 코드는 자주 변경되고, 고정되거나 해시되는 경우가 거의 없으며, 사용자가 검사할 수 있는 방식으로 릴리스되는 경우가 거의 없습니다. 이는 특히 토큰 출시, 에어드랍 또는 UI 업그레이드와 같은 민감한 시기에 표적 공격을 하기에 완벽한 환경을 조성합니다.
변경해야 할 사항
웹3가 안전하게 진화하려면 보안이 스마트 컨트랙트 이상으로 확장되어야 합니다! . 개발자는 백엔드와 동일한 편집증과 엄격함으로 프론트엔드를 다루어야 합니다. 즉, 종속성을 잠그고, 불필요한 써드파티 스크립트를 피하고, DNS 구성을 보호하고, 모든 주요 릴리즈의 일부로 프론트엔드 감사를 처리해야 합니다.
지갑 제공업체도 역할을 해야 합니다. 사용자는 자신이 서명하는 내용을 보다 명확하게 파악할 수 있어야 합니다. 이는 향상된 디코딩, 더 나은 경고, 심지어 프런트엔드 진위 확인을 의미할 수도 있습니다. 지금은 인터페이스에 대한 신뢰가 너무 높고 무결성을 확인하기 위한 노력이 충분하지 않습니다.
사용자 입장에서 보면 가혹하지만 정직한 조언입니다.어떤 UI도 맹목적으로 신뢰하지 마세요. 가치가 높은 프로토콜과 상호 작용하는 경우 도메인 이름만 확인하지 마세요. 소스 코드를 확인하세요. 악성 컨트랙트를 추적하는 브라우저 확장 프로그램을 사용하세요. 뭔가 이상하다고 느껴지면 서명하지 마세요.
결론
웹3는 단순히 신뢰 없이 실행되는 것만이 아닙니다. 신뢰의 시작과 변화, 그리고 끝이 어디인지에 대한 전체 경계에 관한 것입니다. 현재 프론트엔드는 그 경계의 한가운데에 위치하며, 사용자가 보는 것과 서명하는 것 사이의 간극을 악용할 수 있을 만큼 똑똑한 사람들의 놀이터가 되었습니다.
계약이 완벽할지라도 프론트엔드가 공격을 받으면 결과는 똑같습니다. 돈은 손실되고, 신뢰는 깨지고, 사용자들은 모든 것이 어떻게 잘못되었는지 알고 싶어 합니다. 이제 업계에서는 프런트엔드를 뒷전으로 미루는 생각을 버려야 할 때입니다. 해커들에게 프론트엔드는 공격의 첫 번째 목표가 되었기 때문입니다.