[Ping] 7주차

정다연·2022년 11월 17일

Security

목록 보기
7/12

보안뉴스

클레이스왑 해킹으로 드러난 BGP Hijacking 공격기법, 도대체 뭐길래? (boannews.com)

디파이 서비스 22억 규모에 달하는 가상자산 탈취 사건 -> BGP Hijacking 공격 기법이 동원
공격자는 BGP Hijacking을 통해 네트워크 흐름 조작-> 클레이스왑에 접속한 사용자들이 정상적인 SDK 파일이 아닌 공격자가 세팅한 서버로부터 악성코드 다운로드, 이외의 유저 서버쪽 에러로 반환

BGP Hijacking 공격기법은?

AS (Autonomous System): IP 대역을 프리픽스로 관리
BGP (Border Gateway Protocol): 자신의 라우팅 테이블을 서로에게 공유할 때 사용하는 프로토콜-> 신뢰도를 고려하지 않고 가장 빠른 경로만을 따라간다.
BGP Hijacking: AS 간에 라우팅 테이블을 공유하는 BGP 프로토콜을 악용해 공격자가 임의로 설정한 라우팅 테이블에 인접한 AS에 퍼뜨리는 것.

공격자가 악용한 SSL 인증서는?

SDK 파일 다운로드 경로는 HTTPS 프로토콜로 연결-> BGP Hijacking 공격을 수행하더라도 인증서가 일치하지 않으면 정상적 응답 불가-> 공격으로 라우팅 정책 이미 오염-> 해외 SSL 인증서 발급사에서 2개월 동안 무료 제공하는 서비스로 인증서 발급 및 등록

공격에 사용한 악성 JS 파일은?

웹 애플리케이션에 사용되는 다양한 모듈을 통합해 하나의 파일로 생성하는 webpack 파일-> 탈취용 Account 및 Factory Contract 주소 정보 변경 & 클레이스왑에서 사용하는 블록체인 플랫폼 클레이튼 API 주소 조작

공격자들의 사전 준비과정 및 탈취 코인 인출 과정은?

Factory Contract가 토큰 컨트랙트에게 사용 승인을 부여받는 과정 필요-> 최소 7개월 전 준비 작업
KLAY 기반 토큰으로 변환 후 중국의 라이트닝 거래소에 코인 전송

BGP Hijacking 공격의 국내외 사례는?

2014년 풀 서버 하이재킹 사건
2018년 마이이더월렛 해킹 사고: 이더리움을 보관하는 지갑이 해킹당한 사고

BGP Hijacking 공격기법의 대응방안은?

모니터링과 불법적 경로 생성을 막기 위한 IP Prefix Filtering, 라우팅 정보의 무결성 보장 인증서를 발행하는 RPKI

써니나타스 4번, 7번 라이트업 작성

#challenge 4


Plus 버튼을 누르면 1씩 증가한다.
또 Plus 버튼 밑에는 클라이언트 정보가 나타나있다.


25까지 눌렀을 때
I like the SUNiNaTaS browser! 라는 문구가 뜬다

<html><head>

<title>Game 04</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link rel="shortcut icon" href="/static/img/game.ico">

</head>

<body>

<br>

<br>

<br>

<br>

<br>

<br>

<br>

<form method="post" name="test" action="./web04_ck.asp">

<table width="240" cellpadding="0" cellspacing="0" align="center">

<tbody><tr height="30">

<td colspan="2" width="100%" class="table_top" align="right">

<input type="button" name="main_btn" value="main" style="width: 60" onclick="location.href = '/'"> <input type="button" name="main_btn" value="Back" style="width: 60" onclick="history.back()"></td>

</tr>

<tr height="30" class="table_main">

<td width="120" align="center" bgcolor="cccccc"><font size="2"><b>Point</b></font></td>

<td width="120" align="center" bgcolor="cccccc">

<input type="text" name="total" value="25" size="16"></td>

</tr>

<tr height="30">

<td colspan="2" align="center" class="table_top" bgcolor="cccccc">

<input type="button" name="plus_btn" value="Plus" class="btn_check" style="width: 70" onclick="submit()">

</td></tr>

</tbody></table>

<br>

<br>

<table width="1000" cellpadding="0" cellspacing="0" align="center">

<tbody><tr height="30">

<td class="table_top"><font size="2"><b>User-Agent</b></font></td>

<td class="table_top">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56</td>

</tr>

<tr height="30">

<td class="table_top"><font size="2"><b>Auth key</b></font></td>

<td class="table_top">?????</td>

</tr>

</tbody></table>

</form>

 

 

<!-- Hint : Make your point to 50 & 'SuNiNaTaS' -->

<!-- M@de by 2theT0P -->

</body></html>

소스코드를 살펴보면 힌트를 통해 point를 50점으로 만들고 SuNiNaTas 이어야 함을 유추할 수 있다.
따라서 클라이언트에서 서버로 보내는 데이터를 변조해 클라이언트의 브라우저를 suninatas 라 인식시켜야 한다



Burp Suite를 켜 User-Agent를 SuNiNaTaS로 변경해준 후 Forward 버튼을 누른다.

User-Agent가 SuNiNaTaS로 바뀐 걸 알 수 있다. 이상태에서 Plus버튼을 계속 눌러 50이 되게 해준다.

#challenge 7



Yes 버튼을 누르면 내가 너무 느려서 실패했다는 문구가 뜬다.

<!DOCTYPE html>

 

<head>

<title>Game 07</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link rel="shortcut icon" href="/static/img/game.ico" />

<script>

function noEvent() {

if (event.keyCode == 116 || event.keyCode == 9) {

alert('No!');

return false;

}

else if (event.ctrlKey && (event.keyCode = 78 || event.keyCode == 82)) {

return false;

}

}

document.onkeydown = noEvent;

</script>

</head>

<body onload="javascript:document.frn.wen07.focus();">

<form method="get" name="frn">

<div align="center">

<input type="text" name="wen07" value="Do U Like girls?">

</div>

</form>

<form method="post" action="./web07_1.asp" name="frm">

<div align="center">

<input type="button" name="main_btn" value="main" style="width: 60" onclick="location.href = '/'">&nbsp&nbsp&nbsp

<input type="button" name="main_btn" value="Back" style="width: 60" onclick="history.back()">

</div>

<div align="center">

<input type="hidden" name="web07" value="Do U Like girls?">

</div>

<div align="center">

<img src="./iu.gif" width="700" height="1000" name="iu">

</div>

<div align="center">

<input type="submit" value="YES">

</div>

<div align="center">

<img src="./yoona.gif" alt="yoona" width="700" height="1000">

</div>

</form>

</body>

 

<!-- Hint : Faster and Faster -->

<!-- M@de by 2theT0P -->

소스코드를 살펴봤을 때 힌트가 더 빨리 하라고 되어있다.

function noEvent() {

if (event.keyCode == 116 || event.keyCode == 9) {

alert('No!');

return false;

}

else if (event.ctrlKey && (event.keyCode = 78 || event.keyCode == 82)) {

return false;

}

}

keyCode가 116,9일 때 No!를 출력하고 false 값을 리턴한다. Ctrl 키를 누르면서 keyCode 값이 78 또는 82일 때 false 값을 리턴한다. YES 이어야 하는 것 같으니 YES 값을 소스코드에서 찾아본다.

<form method="post" action="./web07_1.asp" name="frm">

<input type="submit" value="YES">

post 방식을 통해 form 데이터를 전송해 submit 버튼에서 YES로 값을 빠르게 입력하면 되는 것 같다.

하지만 아까 YES 버튼을 그냥 눌렀을 때에는 실패 팝업창이 떴으므로 Console에서 frm.submit()를 입력해 계속 엔터를 눌러준다.

열심히 새로고침을 하니까 Not Found가 뜬다. 왜 이런지 모르겠다.

profile
날 것 그대로의 CS 마인드맵

0개의 댓글