패킷 포워딩을 통해 SSL이 적용된 패킷 확인을 위해 사용합니다.

 

#들어오는 패킷 다시 쓰기

iptables -t nat -A PREROUTING -p tcp -j DNAT --to ${IP:Port}

ex) iptables -t nat -A PREROUTING -p tcp -j DNAT --to 127.0.0.1:8080

# 나가는 패킷 다시 쓰기

iptables -t nat -A OUTPUT -p tcp -j DNAT --to ${IP:Port}

ex) ex) iptables -t nat -A OUTPUT -p tcp -j DNAT --to 127.0.0.1:8080

 

Chain은 PREROUTING, INPUT, OUTPUT, POSTROUTING이 존재하고 각각 역할은 다음과 같습니다.

 

PREROUTING 

라우팅이 결정되기 전 체인에 존재하는 룰 적용

 

INPUT

자신의 호스트를 목적지로 들어오는 패킷에 대해 체인에 존재하는 룰 적용

 

OUTPUT

자신의 호스트에서 외부로 나가는 패킷에 대해 체인에 존재하는 룰 적용

 

POSTROUTING

라우팅이 결정되고 난 후, 체인에 존재하는 룰 적용

 

iptables를 적용하고 난 후, burp에서도 다음 설정을 해줘야 ssl이 적용된 패킷을 확인할 수 있습니다.

 

[Proxy] - [Options] - [Proxy Listeners] - [Edit] - [Request handling] - [Support invisible proxying(enable only if needed)]

아래 빨간 박스의 옵션을 체크해주셔야 합니다!

출처 : webterror.net/?p=1622

'NetWork' 카테고리의 다른 글

Python 패킷 캡쳐(with. pypcap)  (1) 2021.03.10
RTP (Realtime Transport Protocol)  (0) 2013.03.04
VMware network  (0) 2012.07.10
tcphdr , tcphdr??  (0) 2012.07.09
ARP_Spoofing  (2) 2012.07.06

OAuth?

OAuth는 제 3의 앱이 자원의 소유자인 서비스 이용자를 대신하여 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법을 말합니다.

쉽게 말하면, 특정 사이트에서 [카카오톡으로 로그인하기], [페이스북으로 로그인하기] 등 타 사이트를 이용해 로그인하는 방법을 자주 접할 수 있는데 타 사이트의 계정에 접근하기 위한 권한을 제어하는 표준 프로토콜을 의미합니다.

 

OAuth를 통해 로그인할 경우 카카오톡이나 페이스북이 아닌 제 3의 사이트는 카카오톡, 페이스북의 계정 정보를 요구할 필요가 없이 Access Token을 통해 접근하므로 사용자 입장에서도 계정 정보가 유출될 위험이 낮아집니다.

 

OAuth의 인증 프로세스는 다음과 같습니다.

payco oauth2.0

OAuth 2.0의 보안 취약점 (CSRF, Convert Redirect) 

 

1) CSRF를 통한 계정 탈취

OAuth를 통해 계정 연동을 진행할 경우 다음과 같은 다음과 유사한 프로세스를 거치게 됩니다.

 

1. 기존 계정과 SNS 계정 연동 요청
2. 요청 SNS 로그인 페이지 출력 (Client ID 값이 포함된 로그인 페이지)
3. ID/PW 를 통해 SNS 계정에 로그인
4. 로그인 성공 시 인증 서버로부터 Authorization code를 발급 받음 (Authentication Server -> 사용자)
5. 발급 받은 code 값과 state 값을 Client 서버로 전송 (사용자 -> Client Server) 6. code 값과 state 값 검증 후 Client 서버에 로그인 되어있는 계정과 SNS 계정이 연동됨

 

이 때 state값은 CSRF token과 같은 역할을 하기 때문에 검증이 미흡할 경우 CSRF 공격을 통해 공격자의 계정으로 연동하는 등의 악의적인 행위가 발생할 수 있습니다. (공격자 SNS 계정으로 접속할 경우 피해자의 계정으로 로그인)

 

대응 방안

state값은 CSRF token과 동일한 역할을 수행하므로, 요청받은 state에 대해 검증을 수행해야 하고 토큰의 유출 및 악용 방지를 위해 유효기간을 짧게 혹은 일회용으로 설정합니다. 

 

 

2) Convert Redirect

앞서 OAuth2.0 인증 프로세스 중, 6. Redirect URL을 통해 로그인 성공 후 리다이렉션 되는 URL을 명시합니다.

따라서 Redirect URL에 대한 검증이 누락되면 해당 값 변조를 통해 임의의 사이트로 리다이렉션되어 계정 탈취와 같은 피해가 발생할 수 있습니다.

 

아래는 네이버 OAuth 요청 가이드 중 일부입니다.

naver oauth 요청 가이드

 

대응 방안

redirect_uri 파라미터에 대해 full path검증을 수행하여 의도하지 않은 페이지로 리다이렉션 되지 않도록 조치함

 

OAuth관련 공부하다가 재미난 자료가 있어 링크 삽입합니다.

간략한 내용은

1. redirect_url에 대해 자사 도메인인 경우 허용(full path 검증 x)

2. 자사 도메인 중, logout 페이지에서 로그아웃 후 referer 헤더값을 참조해 리다이렉션

3. logout 페이지 요청 시 referer에 공격자의 사이트로 접근 유도

www.hahwul.com/2019/06/28/oauth-chained-bugs-to-leak-oauth-token/

 

OAuth 과정에서 발생할 수 있는 재미있는 인증토큰 탈취 취약점(Chained Bugs to Leak Oauth Token) Review

Security engineer, Developer and H4cker

www.hahwul.com

 

[출처]

meetup.toast.com/posts/105

berrrrr.github.io/programming/2019/11/03/oauth2-vulnerability/

www.hahwul.com/2019/06/28/oauth-chained-bugs-to-leak-oauth-token/

금융보안원 OAuth2.0 개요 및 보안 고려사항.pdf

'Web' 카테고리의 다른 글

Same site (Cookie)  (0) 2021.03.29
marquee onstart xss & XSS 기법  (0) 2019.05.10
주요 Editor 샘플페이지 및 취약점 발생경로  (4) 2018.12.03
xp_cmdshell 활성화 쿼리  (1) 2018.10.01
MSSQL Limit 기능 구현  (0) 2018.10.01

SameSite?

웹사이트에서는 일반적으로 광고, 콘텐츠 추천, 서드 파티 위젯, 소셜 임베드 및 다른 기능을 위한 외부 서비스를 통합합니다. 웹을 탐색할 때 이러한 외부 서비스가 브라우저에 쿠키를 저장한 후 개인화된 환경을 제공하거나 고객 참여도를 측정하기 위해 해당 쿠키에 접근할 수 있도록 합니다.

SameSite는 브라우저가 사이트간 요청을 통해 쿠키를 보내지 못하게 하여 정보 유출, CSRF 공격에 대해 보호하기 위해 사용합니다.

HTTP/1.1 302 Found
Location: https://www.google.com/?gws_rd=ssl
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Date: Tue, 30 Mar 2021 04:11:55 GMT
Server: gws
Content-Length: 231
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2021-03-30-04; expires=Thu, 29-Apr-2021 04:11:55 GMT; path=/; domain=.google.com; Secure; SameSite=none
Connection: close

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.com/?gws_rd=ssl">here</A>.
</BODY></HTML>

google cookie

 

SameSite는 3가지 속성을 가지고 있으며, 각 속성별 의미는 다음과 같습니다.

 

SameSite=Strict 

서로 다른 도메인에 대해서 쿠키 전송 불가

 

SameSite=Lax

일부 예외를 제외하고 쿠키 전송 불가

 

SameSite=None; Secure;
서로 다른 도메인 및 동일 도메인 모두 쿠키 전송 가능

samesite=none으로 설정한 경우, secure 속성을 필수적으로 넣어줘야 함

 

※ Secure 

HTTPS 프로토콜에서만 쿠키가 전송되도록 설정함

 

SameSite 속성을 통해 CSRF를 차단할 수 있지만 필요한 다른 사이트로의 이동(ex. 소셜미디어 등)도 차단할 수 있어 사이트별 상황에 맞도록 사용해야합니다.

 

요청 타입별 쿠키 전송 여부

 

[출처]

jinn-blog.tistory.com/97

developers-kr.googleblog.com/2020/01/developers-get-ready-for-new.html

ifuwanna.tistory.com/223

 

'Web' 카테고리의 다른 글

OAuth 2.0  (1) 2021.03.31
marquee onstart xss & XSS 기법  (0) 2019.05.10
주요 Editor 샘플페이지 및 취약점 발생경로  (4) 2018.12.03
xp_cmdshell 활성화 쿼리  (1) 2018.10.01
MSSQL Limit 기능 구현  (0) 2018.10.01

frida script로 메모리 값을 읽는 코드를 작성하여 결과값을 확인하던 중, 중간 중간 널이 들어간 바이트 배열을 확인하게 되었습니다.

 

ex) 1234

위와 같은 현상은 인코딩 차이로 인해 발생합니다.

 

UTF8 vs UTF16

출처 : https://nhj12311.tistory.com/59

 

문자열 중간에 Null값이 삽입되는 것은 UTF-16이므로 frida에서 readUtf16String으로 변경하여 함수 실행 시 정상적으로 값이 read 되는 것을 확인할 수 있습니다.

'Mobile' 카테고리의 다른 글

INSTALL_FAILED_INVALID_APK (with. zipalign)  (0) 2020.12.03
Frida cheat sheet  (0) 2020.10.11
MultiDex Dynamic Debug(feat. JEB)  (0) 2020.05.18
Dynamic Code Loading in Android (feat.DexClassloader)  (3) 2020.05.08
odex to dex  (0) 2020.05.08

python 내 패킷 캡쳐를 위한 라이브러리로 pypcap을 통해 손쉽게 캡쳐 및 가공이 가능합니다.

다만 pypcap에 대한 자료가 많지않아서 원하는 함수나 기능을 사용하기엔 제약이 있습니다 :/

 

pypcap installation

pip install pypcap

 

※ libpcap-dev 의존성을 가지고 있으므로 pypcap 설치전에 libpcap-dev가 설치되어 있어야  함

apt-get install libpcap-dev

 

pypcap 설치 후 python 실행 > import pcap 을 통해 에러가 발생하지 않는다면 정상적으로 설치가 된 것입니다.

 

Example Code 

import pcap
import re
import dpkt
import socket

sniffer = pcap.pcap(name=None,promisc=True,immediate=True,timeout_ms=50) # name=eth, None 일경우 모든 default / promisc는 모든 eth에서 패킷 수집 
sniffer.setfilter('tcp and port 80') # set packet filter

for t, p in sniffer:
    eth = dpkt.ethernet.Ethernet(p)
    ip = eth.data
    tcp = ip.data
    try:
        if len(tcp.data) > 0:
            req = dpkt.http.Request(tcp.data)	#Request패킷만 추출
            print("----------------------------------------------------------------")
            print(req)	# 패킷 출력
            print("----------------------------------------------------------------")
    except:
        pass

 

Example Code 실행 시, 다음과 같이 패킷 캡쳐 확인

출처 : https://saynot.tistory.com/entry/Python-Network-PyPCAP-%EA%B3%B5%EB%B6%80

'NetWork' 카테고리의 다른 글

Iptables port forwarding  (0) 2021.04.29
RTP (Realtime Transport Protocol)  (0) 2013.03.04
VMware network  (0) 2012.07.10
tcphdr , tcphdr??  (0) 2012.07.09
ARP_Spoofing  (2) 2012.07.06

APK 파일 리패키징 후 설치 시 다음과 같은 에러가 발생했습니다.

 

 

Failure [INSTALL_FAILED_INVALID_APK]

 

Sol

zipalign.exe -p -v 4 "<apk file name>" <output_filename>.apk

 

What is Zipalign?

zipalign은 APK 파일의 최적화 기능을 제공하는 정렬 도구입니다.

읽기 성능이 향상되기 때문에 구글 스토어에서 필수적으로 요구하는 항목이므로 정렬되어 있지 않을 경우 설치가 안된다고 하네요

https://developer.android.com/studio/command-line/zipalign

 

※ zipalign 은 안드로이드 스튜디오를 설치하셨으면 build-tools\<버전>\에 있습니다.

'Mobile' 카테고리의 다른 글

Frida Encoding(readUtf8String)  (0) 2021.03.24
Frida cheat sheet  (0) 2020.10.11
MultiDex Dynamic Debug(feat. JEB)  (0) 2020.05.18
Dynamic Code Loading in Android (feat.DexClassloader)  (3) 2020.05.08
odex to dex  (0) 2020.05.08

앞서 확인했던 Unity의 두가지 빌드방법(mono,il2cpp) 중, mono 방식으로 빌드된 게임을 분석해 보도록 하겠습니다.

 

itleader.tistory.com/179

 

#2 - 클릭커 게임 만들기 강좌 - ( 1 / 2 )

안녕하세요 피슈 입니다. 오늘은 최근에 유행하고 있는 클릭커 게임을 만들어 볼까 합니다. 아니 게임 개발 강좌 첫시간인데 벌써 게임을 만들 수 있는거야? 하고 의아해 하실 수 있는 데, 강좌��

itleader.tistory.com

구글에 유니티 게임 예제를 통해 간단한 클릭커 게임을 mono방식으로 빌드하였으며 해당 앱을 예제로 사용해보도록 하겠습니다.

 

 

예제를 통해 생성한 앱이며, 10번을 클릭하면 피카츄가 나오게끔 작성하였습니다.

 

    void Start()
    {
        level = 1;
        pichanum = 10;
        numTxt.text = "0";
        UnityEngine.Debug.Log("Hello World!!");
    }

    // Update is called once per frame
    void Update()
    {
      
    }
    public void Click()
    {
        UnityEngine.Debug.Log("Click!!");
        num++;
        numTxt.text = num.ToString();
        UnityEngine.Debug.Log("pichanum : " + pichanum + "num : " + num);
        if (num == pichanum)
        {

            if (level == 1)
            {
                pichaball.SetActive(false);
                ball.SetActive(true);
            }
            else
            {
                pichaball.SetActive(false);
                pichu.SetActive(true);
            }
        }
    }

이제 빌드된 앱을 살펴보겠습니다.

 

앱의 기본 구조는 다른 apk파일과 동일합니다.

 

다만 assets 폴더 하위 앞서 mono빌드의 특징이라고 할 수 있는 Assembly-CSharp.dll 파일과 여러 dll파일이 존재하는 것을 확인할 수 있습니다.

 

dll 파일 분석을 위해서는 dnspy라는 툴을 이용하도록 하겠습니다.

github.com/0xd4d/dnSpy

 

0xd4d/dnSpy

.NET debugger and assembly editor. Contribute to 0xd4d/dnSpy development by creating an account on GitHub.

github.com

[Assembly-CSarp.dll] - [InGame] - [Click]

dnspy 툴을 통해 dll파일을 확인하면 원본 코드와 유사한 코드를 확인할 수 있습니다.

 

코드 창에서 우클릭 - [Edit Method(C#)을 클릭합니다.

 

this.num++; 부분을 this.num+=5; 로 변경하여 한번 클릭할때마다 5가 증가하도록 수정 후 Compile합니다.

 

수정 후 [File] - [Save Module]을 통해 변조한 Assembly-CSharp.dll 파일을 저장합니다.

 

앞서 10번을 클릭하면 피카츄가 나오도록 설정하였는데, 이젠 2번만 클릭하면 되겠네요.

 

그 후 apk 파일을 변조한 dll파일로 변경하여 리패키징 후에 다시 에뮬레이터에서 실행하면 2번만 클릭했음에도 피카츄를 볼 수 있습니다.

 

※ 해당 내용은 분석을 위한 내용으로 해당 내용을 통해 악의적인 행위를 하는 경우 모두 행위자에게 법적책임이 발생할 수 있습니다. 공부, 분석을 위해 실습 예제를 직접 만들어서 하는 것을 추천드립니다.

'Mobile Game' 카테고리의 다른 글

Unity Mono vs il2cpp  (0) 2020.10.11
Mobile Game Engine  (0) 2020.10.10

유니티 프로그램은 두가지의 빌드 방법이 존재합니다.

 

Mono와 il2cpp 두가지 방식이 존재하며, 각각의 빌드에 관해 알아보겠습니다.

 

1) Mono

Unity는 다양한 플랫폼을 지원하기 위해 Cross-compile 플랫폼을 제공하며, 이를 위해 C#을 사용합니다.

 

C#코드는 msc.exe라는 프로그램에 의해 IL코드로 변환됩니다.

 

예제 C# 코드를 통해 Mono 방식으로 빌드된 앱의 구동방법을 확인해보겠습니다.

[code language=”csharp”]
using UnityEngine;
using System.Collections;

public class HelloWorld : MonoBehaviour {
void Start() {
Debug.Log ("Hello, World!");
}
}
[/code]

 

해당 예제 코드를 Build를 하면, Assembly-CSharp.dll 파일이 생성됩니다.

 

[code language=”csharp”]
.class public auto ansi beforefieldinit HelloWorld
extends [UnityEngine]UnityEngine.MonoBehaviour
{
// Methods
.method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
// Method begins at RVA 0x2050
// Code size 7 (0x7)
.maxstack 8

IL_0000: ldarg.0
IL_0001: call instance void [UnityEngine]UnityEngine.MonoBehaviour::.ctor()
IL_0006: ret
} // end of method HelloWorld::.ctor

.method private hidebysig
instance void Start () cil managed
{
// Method begins at RVA 0x2058
// Code size 11 (0xb)
.maxstack 8

IL_0000: ldstr "Hello, World!"
IL_0005: call void [UnityEngine]UnityEngine.Debug::Log(object)
IL_000a: ret
} // end of method HelloWorld::Start

} // end of class HelloWorld
[/code]

 

해당 형태를 IL(Intermediate Language)이라고 하며, 해당 코드가 실제로 실행됩니다.

 

IL코드는 Assembly 코드와 형태가 비슷하지만, IL코드 실행을 위해서는 IL코드를 Assembly 코드로 변환해야 하며 이를 위해 mono(libmono.so)를 사용합니다.

 

mono가 IL코드를 Assembly로 변환하여 실행하게 됩니다.

 

2) il2cpp

il2cpp는 앞서 설명했던 IL 코드를 C++ native code로 변환하여 실행할 수 있도록 하는 빌드방법입니다.

때문에 Assembly-CSharp.dll 파일 대신, libil2cpp.so 파일의 결과물이 생성되며 IL코드가 C++ native code(libil2cpp.so)로 변화되어 기기에서 실행됩니다.

 

출처

blogs.unity3d.com/kr/2015/09/22/kr-csharp-compile-il2cpp/

 

C# 컴파일 그리고 il2cpp - Unity Technologies Blog

이글은 il2cpp를 이해하기전에, C#의 컴파일 과정을 설명하는 글입니다. 사실 il2cpp가 나온지 꽤 되서, 저보다 더 자세히 아시는 분들도 많을꺼라 생각됩니다. 이 블로그는 아직 il2cpp를 잘 모르는, �

blogs.unity3d.com

chp747.tistory.com/334

 

Unity Mono 분석

Unity Mono 분석 .Net Framwork Microsoft에서 개발한 Windows 프로그램 개발 및 실행 환경을 말합니다. 다양한 프로그래밍 언어와 라이브러리들을 이용하여 윈도우 기반 응용프로그램을 개발 및 실행할 수

chp747.tistory.com

 

chp747.tistory.com/m/310?category=724021

'Mobile Game' 카테고리의 다른 글

Unity Mono 게임 분석  (0) 2020.10.11
Mobile Game Engine  (0) 2020.10.10

awakened1712.github.io/hacking/hacking-frida/

'Mobile' 카테고리의 다른 글

Frida Encoding(readUtf8String)  (0) 2021.03.24
INSTALL_FAILED_INVALID_APK (with. zipalign)  (0) 2020.12.03
MultiDex Dynamic Debug(feat. JEB)  (0) 2020.05.18
Dynamic Code Loading in Android (feat.DexClassloader)  (3) 2020.05.08
odex to dex  (0) 2020.05.08

모바일 게임 분석에 앞서 주로 사용되는 엔진을 확인해보겠습니다.

 

모바일 게임에서는 주로 2가지의 엔진을 사용하고 있습니다.

 

유니티(Unity)와 언리얼(Unreal) 엔진이 주로 사용됩니다.

 

1) 유니티 

unity.com/kr

 

유니티 - Unity

Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.

unity.com

장점

1) 무료 사용이 가능(무료 버전에서는 로고가 출력됨)

2) 3D, 2D 개발이 가능함

3) 자료를 찾기가 쉬움

 

 

2) 언리얼(Unreal)

www.unrealengine.com/ko/

 

언리얼 엔진 | 가장 강력한 리얼타임 3D 창작 플랫폼

언리얼 엔진은 게임, 시뮬레이션, 시각화의 디자인 및 개발에 사용되는 통합 크리에이터용 툴세트입니다.

www.unrealengine.com

장점

1) 엔진 소스코드 제공

2) 블루프린트 기능을 통해 코딩없이 제작이 가능함

 

두가지 중, 앞으로 Unity 게임 분석을 진행하고자 합니다.

 

출처 : brunch.co.kr/@iimjae123/1

'Mobile Game' 카테고리의 다른 글

Unity Mono 게임 분석  (0) 2020.10.11
Unity Mono vs il2cpp  (0) 2020.10.11

+ Recent posts