안녕하세요 클레이스왑 커뮤니티 여러분,
클레이스왑을 개발한 오지스는 사용자들의 신뢰와 더불어 프로덕트의 보안을 항상 최우선순위에 두고 있습니다. 아울러, 클레이튼 생태계의 대표 탈중앙화 금융 프로토콜로서 정기적인 보안 감사 및 보호 조치를 통해 안전성 증대에 심혈을 기울여 왔습니다.
하지만 금일 클레이스왑 프론트 엔드 소스 코드 및 스마트 컨트랙트 보안 이슈가 아닌 외부 사이트로부터의 SDK 파일 감염으로 인해 매우 안타까운 외부 공격이 발생하였습니다. 이로 인해 클레이스왑 사용자 여러분께 심려와 불편함을 끼쳐드린 점에 대해 진심으로 사과의 말씀을 드리며, 깊은 양해를 구합니다.
이번 포스팅에는 사고 발생 원인, 정상화를 위한 대응 방안, 사고 시점 사용자들을 위한 후속 사용 가이드 등 여러 상세한 내용들이 포함되며, 클레이스왑 팀이 고려하고 있는 보상 방안까지 말씀드리고자 합니다.
끝으로, 저희 팀은 금번 외부 공격의 특성 및 세부 방식을 커뮤니티에 공유해 드릴 것이며, 클레이튼 내에 또 다른 악용사례가 발생하지 않기를 바랍니다.
1. 사고 내용
2022년 2월 3일 11:31:41 경 (UTC+9) 82005544 block에서 클레이스왑 UI를 통해 토큰 관련 기능 실행 시 토큰이 특정 지갑으로 전송되는 트랜잭션이 최초로 실행되었습니다.
원인은 외부 네트워크망에 대한 공격으로 인해 사용자의 정상적인 Kakao SDK Javascript 파일요청 (https://developers.kakao.com/sdk/js/kakao.min.js ) 이 카카오 서버가 아닌 공격자가 구축한 제 3의 서버로 연결되어 악성코드 파일이 다운로드 되는 현상이 일어났기 때문입니다.
(수정 전)
공격자는 클레이스왑의 구버전(1월 4일경) 코드를 기반으로, 사용자의 모든 트랜잭션 요청을 자신의 컨트랙트로 사용자의 토큰을 직접 보내거나(Transfer) 사용승인(Approve)하도록 변경하였고 클레이스왑 사이트에 로딩되는 Kakao SDK 스크립트를 변경하여 기존 클레이스왑 코드의 동작을 방해하고 자신의 코드가 실행되도록 하는 형태로 악성코드를 제작했습니다.
(수정 후)
공격자는 클레이스왑의 구버전(1월 4일경) 코드를 기반으로, 사용자의 모든 트랜잭션 요청을 자신의 컨트랙트로 사용자의 토큰을 직접 보내거나(Transfer) 사용승인(Approve)하도록 변경하는 악성코드를 제작하였고, 클레이스왑 사용자가 정상적으로 “https://developers.kakao.com/sdk/js/kakao.min.js" 를 요청하더라도 카카오가 제작한 정상적인 SDK 가 아닌 공격자 자신이 제작한 악성코드 파일이 다운로드 되도록 하여 기존 클레이스왑 코드의 동작을 방해하고 자신의 악성코드가 실행되도록 하는 형태로 클레이스왑의 동작을 변경했습니다.
오염된 로직으로 트랜잭션이 발생된 경우 공격자의 주소 (0x3f315f2bfa8452febbc08a9e3a7fdf8872f9527c, 0xdfcb0861d3cb75bb09975dce98c4e152823c1a0b) 로 사용자의 자산이 사용 승인되거나 자산이 직접 전송되게 되었습니다.
2.사고 대응
사고 파악 시점으로부터 추가적인 피해를 방지하기 위해 클레이스왑의 모든 기능을 차단하고 긴급 점검을 실행하였으며, 탈취된 자산이 오르빗 브릿지를 통해 거래소로 유출되는것을 방지하고자 브릿지 내 클레이튼 민터 동작을 일시 중단하였습니다.
(수정 전)
클레이스왑 및 오르빗 브릿지 기능 제한과 함께 사고의 주요 원인으로 파악되는 감염된 Kakao SDK 파일을 제거하고 전반적인 소스 코드 점검을 진행하였습니다. 더불어 해커가 사용한 스마트 컨트랙트에 노출된 지갑 주소와 자산 목록을 모두 파악하였으며, 정상화된 클레이스왑 사이트를 통해 문제 컨트랙트에 승인된 자산 목록을 다시 해제할 수 있도록 추가 개발을 완료하였습니다. 노출된 지갑 주소 목록과 승인 내역을 삭제하는 방법은 아래에서 다시 한번 설명드릴 수 있도록 하겠습니다.
(수정 후)
클레이스왑 및 오르빗 브릿지 기능 제한과 함께 사고를 빠르게 분석하여, 카카오의 가이드라인에 따른 정상적인 경로인 “https://developers.kakao.com/sdk/js/kakao.min.js" 를 통해 Kakao SDK 를 요청했음에도 카카오가 제작한 정상적인 SDK가 아닌 악성코드 파일이 다운로드 되는 것을 확인하고, 클레이 스왑 사이트내에서 Kakao SDK 로딩을 제거하였습니다. 더불어 해커가 사용한 스마트 컨트랙트에 자산이 승인된 클레이스왑 유저 지갑 주소와 자산 목록을 즉시 파악하여 정상화된 클레이스왑 사이트를 통해 문제 컨트랙트에 승인된 자산 목록을 다시 해제할 수 있도록 추가 개발을 완료하였습니다. 노출된 지갑 주소 목록과 승인 내역을 삭제하는 방법은 아래에서 다시 한번 설명드릴 수 있도록 하겠습니다.
또한 근본적인 원인 파악을 위해 관계사 및 보안감사 업체 등과 긴밀한 협력을 이어나가고 있습니다.
문제 발생 시점 이전에 사이트를 접속한 상태로 계속해서 클레이스왑을 이용중인 유저의 경우, 공격자의 코드가 남아 있는 사이트 상에서 트랜잭션이 발생되기 때문에 지속적으로 자산 탈취가 발생할 수 있습니다. 이 부분은 클레이스왑에서 별도로 처리가 불가능하기 때문에 사용자가 반드시 직접 자신의 인터넷 브라우저의 캐시를 삭제한 후 사이트를 이용해야 합니다.
클레이스왑 프론트 엔드 소스 코드 및 스마트 컨트랙트의 결함이나 보안적 이슈가 아니기에, 해당시간대에 클레이스왑 사이트에서 트랜잭션을 발생시킨 사용자를 제외한 다른 사용자의 모든 자산은 안전하게 보관되어 있음을 알려드립니다.
3. 보상 방안
클레이스왑의 개발사인 오지스는 누구보다 탈중앙화 금융을 발전시키고자 하는 기업으로, 이번 안타까운 사고로 인해 발생한 피해를 최소화 시키고자 보상안을 마련할 계획입니다. 현재 파악된 피해규모는 약 22억원 상당의 가상자산으로, 현재까지 파악된 피해 내역에 대해서는 관계사와 긴밀한 협의를 통해 문제의 원인을 정확히 파악하고 방안을 도출할 예정입니다. 빠른 시일 내에 추가 공지를 통해 보상 시기와 방식에 대해 안내드리겠습니다.
이슈 시점에 총 325개의 지갑에서 407개의 비정상적 트랜잭션이 발생된 것으로 파악되며, 각각의 트랜잭션들을 조회하여 관련 보상 지급을 준비할 예정입니다. 보상과 관련된 자세한 일정 및 방법에 대해서는 빠른 시일 내에 추가 공지를 통해 안내드리겠습니다.
2022년 2월 3일자로 클레이스왑에서 스왑, 예치, 출금 등의 거래를 위해 토큰 승인 및 트랜잭션 진행하신 유저분들의 경우, 클레이스왑 접속 후 토큰 승인 해제 페이지로 이동하여 반드시 모든 자산에 대해 토큰 승인을 해제하신 후 이용을 부탁드립니다.
토큰 승인 해제 완료 후 문제된 컨트랙트로부터 안전하게 자산을 관리할 수 있으나, 새로운 지갑 주소로 기존 자산을 전송한 후 계속해서 클레이스왑을 이용하는 것을 권장드립니다.
4. 토큰 승인 해제 가이드
문제 컨트랙트가 요청한 토큰 승인(Approve)을 완료한 지갑의 경우, 반드시 해당 승인 트랜잭션을 직접 해제한 후 KLAYswap을 이용해야 합니다. 아래 절차에 따라 토큰 승인 해제를 진행할 수 있습니다.
- KLAYswap 사이트 접속 후 표시되는 팝업 확인후 [토큰 승인 해제 페이지로 이동하기] 버튼을 클릭합니다.
* 사이트 접속 시 해당 팝업이 표시되지 않는 경우, 인터넷 캐시 삭제 후 사이트를 접속해주시기 바랍니다.
2. 토큰 승인 해제 페이지에서 [지갑 연결] 버틑을 클릭해 사용하던 지갑 연결을 완료합니다.
3. 지갑 연결 완료 시 문제 컨트랙트의 요청을 승인한 자산 목록을 모두 확인할 수 있습니다. [토큰 승인 해제하기] 버튼을 클릭하여 트랜잭션을 실행합니다. 여러개의 자산을 승인한 상태라면 해당 자산 별로 트랜잭션을 실행해야 하므로, 승인한 자산 목록 수(Total)가 0으로 변경될 때까지 순차적으로 트랜잭션을 요청해야 합니다.
* Token 탭과 LP Token 탭, Single Deposit 탭을 각각 확인해주세요.
4. 토큰 해제 트랜잭션이 모두 완료되면, [토큰 승인 해제하기] 버튼 비활성 처리 및 승인한 자산 목록이 0 으로 변경됩니다. 버튼을 클릭하면 모두 승인 해제 처리되었음을 확인할 수 있습니다.
5. 위 절차를 모두 완료한 경우 해당 지갑은 문제 컨트랙트로부터 안전하게 자산 관리가 가능하나, 새로운 지갑 주소로 자산을 이전하여 계속해서 KLAYswap을 이용하는 것을 권장드립니다.
https://medium.com/klayswap/klayswap-incident-report-feb-03-2022-70ff124aed6b