안드로이드 Magisk 루팅 방법(갤럭시 S7)
https://m.blog.naver.com/timeless947/221927525919

TWRP (모드 진입 : 갤럭시 S7 기준으로 볼륨'상'키+전원키+가운데키)
https://dl.twrp.me/herolte/


안드로이드 순정 펌웨어 다운로드를 위한 samfirm (갤럭시 S7)
https://rgy0409.tistory.com/4509
https://rgy0409.tistory.com/3510
https://hackcatml.tistory.com/93

> samfirm 프로그램 막혔음
https://hackcatml.tistory.com/93
https://samfw.com/firmware/SM-G930K/KTC/G930KKKU3EVG2

삼성 오딘3(Odin) 사용하여 스마트폰 복원 방법
https://seo-security.tistory.com/35

 

[Android] 안드로이드 루팅 & 순정 펌웨어 복구

1. 안드로이드 루팅하기 루팅은 Android 운영 체제에 대한 관리 액세스 권한을 얻는 프로세스로, 이를 통해 사용자는 제조업체에서 일반적으로 허용하는 것 이상으로 장치의 소프트웨어를 수정할

seo-security.tistory.com

 

 

※ 안드로이드 순정 설치할 시 주의할 점※

1. 오딘3 버전에 따라서 결과(성공, 실패)가 다를 수 있음. 현재 나는 v3.13버전 사용중.

이전 버전 사용하니, 순정 설치 실패함

 

2. 순정을 설치하고, 폰을 재부팅할 때, 리커버리 모드에 진입하여

>> Wipe data/facroty reset - yes을 무조건 먼저하고 나서, Reboot system now를 진행해야 한다.

(안 그러면 무한 로딩 걸릴지도..)

 

 

 

 

 

 

'Study > Mobile' 카테고리의 다른 글

Android - 리패키징  (0) 2023.10.06
Android - Frida 후킹  (2) 2023.10.06
Android 취약점 진단 시 참고  (0) 2022.11.29
Android - adb 메모리 덤프  (0) 2022.11.29

1. 데몬 관리

웹 서버 데몬이 root계정으로 운영될 경우, 웹 애플리케이션 취약점이나 buffer overflow 등을 이용하는 공격자에게 root 권한을 유출할 수 있음

 

[판단 기준]

양호 - webtob 데몬이 root 계정으로 운영되지 않도록 전용 계정으로 구동한 경우

취약 - webtob 데몬이 root 계정으로 운영되지 않도록 전용 계정으로 구동하지 않은 경우

 

[확인 방법]

#ps -ef | grep webtob 에서 root 이외의 계정으로 구동되는지 확인

(결과예시)

adm01 31012  1  0  Mar 28 ?  00:12:28 wsm -I 0x2 -l webtob

root 31012  1  0  Mar 28 ?  00:14:11 htl -I 0x2 -l webtob

adm01 31012  1  0  Mar 28 ?  00:14:48 hth -I 0x2 -l webtob

 

root 로 보인다고 해서 무조건 취약이 아니다. 

아래 사항을 파악해야 한다.

 

1) root 계정으로 운영 시

Well-known 포트는 root 로만 구동이 가능.

Root 권한의 80번 포트를 사용하여 구동되어진 경우 1024번 포트 이상의 전용 계정으로 구동하도록 권장

서비스 영향도 존재 시, 취약 - 위험수용(장기)

 

2) WebtoB 전용 계정으로 운영 시

WebtoB 전용 계정으로 운영 시에도 htl 프로세스의 경우 root 권한을 부여해야 실행가능함(sticky-bits 부여 등)

따라서 /bin 폴더에 있는 htl 프로세스의 권한 부여 현황 확인(ls -al 등)이 추가적으로 필요

전용계정으로 운영 중이나, htl 실행을 위해 sticky-bits 부여한 경우 양호처리

 

 

 

2. 관리서버 디렉터리 권한 설정

일반 사용자가 관리 서버 디렉터리에 접근할 경우 홈페이지 변조, 설정 변경 등으로 인한 장애가 발생할 수 있으므로 관리 서버 디렉터리에 대한 일반 사용자의 접근 권한을 제한해야 함

 

[판단 기준]

양호 - 관리서버 디렉터리에 일반 사용자가 접근할 수 없도록 권한이 750인 경우

취약 - 관리서버 디렉터리에 일반 사용자가 접근할 수 없도록 권한이 750이 아닌 경우

 

[확인 방법]

1. Unix

1) 관리서버 디렉터리 위치 확인

#vi [WebtoB_HOME]/config/http.m

*NODE

  WEBTOBDIR= "/home/user/webtob",

...

2) 관리서버 디렉터리(ServerRoot) 권한 확인

(결과예시)

[ServerRoot] /adm0101/jeus/webtob

drwxrwxr-x 16 adm01 adm01 4096 Mar 10 2021 .  >> 취약

 

2. Windows

Administrator 또는 전용 웹 서버 계정 소유이고

전용 웹 서버 계정 그룹(Administrator)(모든 권한)

Users 그룹(쓰기 권한 제거), Everyone 그룹(그룹 제거) 확인

 

[명령어]

lcalcls %WEBTOBDIR%

 

3. 헤더 정보 노출 방지

공격자가 대상 시스템의 정보를 획득하기 위해 고의적으로 웹 서버 헤더 정보를 유출 유도할 수 있음

 

[판단 기준]

양호 - 헤더 정보 노출을 제한한 경우

취약 - 헤더 정보 노출을 제한하지 않은 경우

 

[확인 방법]

[WEBTOB_HOME]/config/http.m 파일에서 'ServerTokens'의 값이 'OFF' 인지 확인

 

##여기서 주의할 점##

최신 버전의 WebtoB 는 환경 설정 파일 내에 ServerTokens=OFF 설정이 없지만 default로 OFF 되어있는 경우가 있다.

wasadm(어드민 접속 명령어)를 통해서 cfg -n 으로 확인해보면 Off 로 적용되어 있음을 확인할 수 있다. 

 

 

'Study' 카테고리의 다른 글

커버로스(Kerberos)  (0) 2023.08.29
Windows Powershell(2)  (0) 2022.08.05
Windows Powershell  (0) 2022.08.04
Puzzing 기본  (0) 2021.04.07

1. 먼저 컴파일, 디컴파일 등에 필요한 프로그램 설치가 먼저다

1) ApkStudio : APK 파일 변조 및 리패키징, 설치 등등 
2) APKToolGUI : APK > 디컴파일 (그 전에 JAVA 등 설치과정이 필요한데 프로그램에서 알려주는 데로 하면 됨)
3) jadx-gui : APK > 자바 소스코드


2. 이번에 할 방법은 [디컴파일 도구]를 통해 앱 분석 후, 루팅 탐지 함수를 확인하고 / [컴파일 도구]를 이용해 디스어셈블러화하여 루팅 탐지 함수의 코드를 항상 false 되게 변조하고 / 다시 [리패키징 및 sign 과정]을 거쳐 install을 할 예정

- 디컴파일 도구인 "jadx-gui"를 이용해 앱 분석 
(ctrl+shift+F로 텍스트 검색을 많이 활용한다)

- 루팅 탐지 함수를 찾았다면 해당 함수의 경로 및 이름 확인

- 컴파일 도구인 "ApkStudio"를 이용하여 함수(smali파일) 찾고 코드 변조 진행

- 리패키징: "Project - Build" 클릭 후 dist 폴더 생성 및 apk 파일 생성 확인
- Sign : 생성된 apk 파일 클릭한 상태에서 "Project - Sign/Export"
https://mkkbest.tistory.com/entry/%EC%9E%90%EB%B0%94-keytool-%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%83%9D%EC%84%B1

Java의 keytool.exe 있는 위치 찾아서 (일반적으로 Java/jdk/bin/keytool.exe)
cmd> keytool -genkey -v -keystore yr.keystore -alias yr -keyalg RSA -keysize 2048 -validity 3650
개인 인증서 생성 후 Sign 진행
(암호는 입력해야 제대로 앱이 리패키징 됨)

- Install : "Project - Install" 클릭 시 안드로이드 기기에 설치 완료됨
(안되면 https://info-lab.tistory.com/122 여기서 adb install 방법 확인) 

'Study > Mobile' 카테고리의 다른 글

안드로이드 - 루팅 & 순정 복구  (1) 2023.11.14
Android - Frida 후킹  (2) 2023.10.06
Android 취약점 진단 시 참고  (0) 2022.11.29
Android - adb 메모리 덤프  (0) 2022.11.29

1. Windows에 Frida 설치
cmd> pip install frida
cmd> pip install frida-tools

2. 프리다 버전 확인
cmd> frida --version

3. 안드로이드 기기에 frida server 설치 및 구동
https://github.com/frida/frida/releases
- 여기서 "아까 확인했던 frida 버전"과 "안드로이드 기기에 맞는 버전"을 다운로드 받기

+) "안드로이드 기기 버전 확인"
cmd> adb shell getprop | find "cpu"
결과예시> [ro.product.cpu.abi]: [arm64-v8a]
....
여기서 확인해야할 것은 cpu.abi >> "arm64"를 기억하자

- 다운로드(xz 파일) 받은 후 압축해제

- 안드로이드 기기에 파일 넣어주기
cmd> adb push [압축해제파일명] /data/local/tmp
cmd> adb shell
$ su  (root 계정으로 권한상승)
# cd /data/local/tmp (넣은 파일 있는 곳으로 이동)
# ls (넣은 파일 있는지 확인)
# chmod 755 [압축해제파일명] (실행권한 부여)
# ./frida-server-16.1.3-android-arm64 & (백그라운드&에서 frida-server 구동)

※ 만약, 'Unable to start : Error binding to address 127.0.0.1:27042: Address already in use' 에러가 떴다면, frida-server가 이미 돌아가고 있다는 뜻이기 때문에 프로세스 종료 후 다시 구동시켜줘야 한다

# ps -ef | grep frida (frida라는 텍스트 들어간 프로세스id 확인)
# kill -9 [pid] (프로세스 강제 종료)
# ./frida-server-16.1.3-android-arm64 & (백그라운드&에서 frida-server 다시 구동)

4. 설치된 APK의 [패키지명] 확인
cmd> frida-ps -Uai (결과에서 Identifier를 보면 된다)
결과예시 >
  PID  Name             Identifier
-----  ---------------  ---------------------------------------
23384  Gmail            com.google.android.gm
15319  Google           com.google.android.googlequicksearchbox
21709  Google Play 스토어  com.android.vending
...

5. Frida 후킹 시작
cmd> frida -U -f [패키지명] -l [후킹파일명.js]
명령예시> frida -U -f com.google.android.gm -l hooking.js

 

후킹파일 예시)

Java.perform(function(){
	var obj = Java.use('q5.b');
	obj.n.overload().implementation = function(){
		console.log('[+] 루팅 완료');
		return false;
	}
});

'Study > Mobile' 카테고리의 다른 글

안드로이드 - 루팅 & 순정 복구  (1) 2023.11.14
Android - 리패키징  (0) 2023.10.06
Android 취약점 진단 시 참고  (0) 2022.11.29
Android - adb 메모리 덤프  (0) 2022.11.29

□ 커버로스(Kerberos)란?

  • 티켓(ticket) 기반의 컴퓨터 네트워크 인증 프로토콜. 클라이언트 서버 모델을 목적으로 개발되었으며 사용자와 서버가 서로 식별할 수 있는 상호 인증(양방향 인증)을 제공한다.
  • 보안이 보장되지 않은 네트워크 환경에서 요청을 보내는 유저와 요청을 받는 서버가 서로의 신뢰성을 확보하기위해 사용된다.

* 티켓(ticket) : 유저 아이디를 안전하게 전달하는 데 사용되는 정보 패킷으로, [유저 아이디, 유저 호스트의 IP 주소, 타임 스탬프(time stamp, 시간 기록), 티켓 수명을 정의하는 값, 세션 키] 등을 포함한다

 

□ 커버로스의 구성요소

- KDC(Key Distribution Center)

: 키 분배 서버(Kerberos에서 가장 중요한 시스템)

: 모든 사용자와 서비스들의 암호화키(비밀키, secret key)를 보유

: 신뢰할 수 있는 제3의 기관으로서 티켓을 생성, 인증서비스를 제공

: 클라이언트와 서비스는 KDC의 무결성을 신뢰하며, 이러한 신뢰는 커버로스 보안의 근간

: 사용자의 패스워드는 비밀키로 변환됨. 이 비밀키는 주체와 KDC 사이에서 "민감한 데이터를 전송"하기 위해 사용되며, "사용자 인증 목적"을 위해서도 사용됨

: TGS와 AS로 구성

 

- AS(Authentication Service)

: 실질적으로 인증을 수행

: 사용자에 대한 인증을 수행하는 KDC의 부분 서비스

 

- TGS(Ticket Granting Service)

: 티켓 부여 서비스

: 티켓을 부여하고 티켓을 분배하는 KDC의 부분 서비스

 

- SS(Service Server, Resource Server)

: 유저가 최종적으로 통신하고자 하는 목적지 서버

 

- Ticket

: 사용자에 대해 신원과 인증을 확인하는 토큰

: 사용자가 다른 주체들과 통신이 필요할 때마다 패스워드를 입력하지 않도록 도와 줌

 

- Principals

: 인증을 위하여 커버로스 프로토콜을 사용하는 모든 실체

 

□ 커버로스의 동작절차

이미지 출처 https://kim-dragon.tistory.com/187

1,2(Request TGT) : 사용자는 워크스테이션에 로그인하고 호스트의 서비스를 요청한다

3(TGT+Session Key) :  AS는 사용자가 DB에 접근권한이 있는지 확인한다. 그리고 TGT(Ticket Granting Ticket, 티켓을 받기 위한 티켓) 와 세션키를 생성한다. 그 결과물을 사용자의 패스워드로부터 유도한 키를 사용하여 암호화한다.

4(Request Ticket + Auth) : 워크스테이션은 사용자에게 프롬프트를 통해 패스워드를 묻고, 그것으로 수신되는 메시지를 복호화한 다음(유저는 당연히 자신의 패스워드를 알고 있으므로, AS로부터 받은 정보를 복호화하여 TGS 세션 키를 얻을 수 있다.) 사용자 이름, 네트워크 주소, TGS의 시간이 기록된 티켓과 인증자를 보낸다.

5(Ticket + Session Key) : TGS는 티켓과 인증자를 복호화하고, 요청을 확인하고 요청된 서버에 사용할 티켓을 생성한다.
6(Request Service + Auth) : 워크스테이션은 티켓과 인증자를 서버에 보낸다.

7(Server Authentication) : 서버는 티켓과 인증자가 일치되는지를 확인하고, 서비스에 대한 접근을 허락한다. 만약 쌍방 인증이 필요한 경우라면 서버는 인증자를 반환한다.

 

□ 특징

  • 세션 키는 비밀 키와 다른 개념이다.
  • 세션 키는 유저와 서비스 간의 통신에 필요한 키이다.
  • 커버로스에서 유저는 TGS, SS와 통신을 하게 되므로, 두 개의 세션 키를 필요로 한다.
  • 비밀 키는 서비스가 유저에게 만들어서 보내줄 티켓을 암호화하거나, 서비스가 유저로부터 전달받은 티켓의 복호화를 위해 가지고 있는 키이다.
  • 티켓의 복호화를 위해 TGS는 TGS 비밀 키를 가지고 있고, SS는 SS 비밀 키를 가지고 있다.
  • 티켓의 암호화를 위해 AS는 TGS 비밀 키를 가지고 있고, TGS는 SS 비밀 키를 가지고 있다.
  • 또한 세션 키는 티켓 안에 들어갈 데이터 중 하나이기 때문에 AS는 TGS 세션 키를 가지고 있고, TGS는 SS 세션 키를 가지고 있다.

 

□ 커버로스의 장단점

장점 단점
- 데이터의 기밀성과 무결성 보장
- 재생공격 예방
- 개방된 이기종 간의 컴퓨터에서 자유로운 서비스 인증이 가능(SSO)
- 대칭키를 사용하여 도청으로부터 보호
- 패스워드 사전공격에 약함
- 비밀키, 세션키가 임시로 단말기에 저장되어 침입자에 의해 탈취당할 수 있음
- TimeStamp로 인해 시간동기화 프로토콜이 필요
(요청 시간에 대한 요구가 엄격함(통상적으로 5분). 만약 요청을 주고받는 호스트들 간에 시간 동기화가 되어있지 않을 경우 통신이 불가능)
- 비밀키 변경 필요
- KDC가 단일실패지점(SPoF, Single Point of Failure)이 될 수 있음
- KDC는 많은 수의 요청을 처리 가능해야 함(즉, 확장 가능성이 있어야 함)
- TGS & AS는 물리적 공격 및 악성코드의 공격에 취약

 

 

'Study' 카테고리의 다른 글

WEB/WAS 취약점 진단 참고 - WebtoB  (1) 2023.10.27
Windows Powershell(2)  (0) 2022.08.05
Windows Powershell  (0) 2022.08.04
Puzzing 기본  (0) 2021.04.07

https://jdh5202.tistory.com/916

 

'Study > Mobile' 카테고리의 다른 글

안드로이드 - 루팅 & 순정 복구  (1) 2023.11.14
Android - 리패키징  (0) 2023.10.06
Android - Frida 후킹  (2) 2023.10.06
Android - adb 메모리 덤프  (0) 2022.11.29

https://jjadmin.tistory.com/24

 

XSS

※개인학습을 위해 OWASP Top 10 문서를 번역한 내용 1. XSS 공격의 개요 OWASP TOP 10에 매년 이름을 올리는 원초적이나 보안이 쉽지 않은 공격기법이다. 악의적인 사용자가 공격 대상이 되는 사이트에

jjadmin.tistory.com

https://twoicefish-secu.tistory.com/198

 

크로스사이트 스크립팅(XSS) 검증 필살기 모음

">asdfalert('xss');">alert(1);/>alert('xss');"/>prompt('test', 'test');">asdfasdf">aaaaasdfprompt()asd"+onfocus="alert(/xss/)"+autofocus=     -->

twoicefish-secu.tistory.com

https://sungpil94.tistory.com/307

 

XSS 우회

1. 세미콜론(;)이 필터링될때 -> ;대신 -로 사용 2. document.cookie에서 .가 필터링될때 -> document.cookie 대신 document[`cookie`]로 사용 3. location.href로 이동되는 값을 임의로 변조할때 -> query 파라미터 값을

sungpil94.tistory.com

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

 

Cross-Site Scripting (XSS) Cheat Sheet - 2022 Edition | Web Security Academy

Interactive cross-site scripting (XSS) cheat sheet for 2022, brought to you by PortSwigger. Actively maintained, and regularly updated with new vectors.

portswigger.net

https://itinformation.tistory.com/49

 

TRACE와 XST(Cross-site Tracing) 공격

cross site tracing (XST 공격) XST 공격이란 기본적으로 HTTP 메소드 중 하나인 TRACE메소드를 이용한 XSS기법 중 하나이다. 서버에서 TRACE 메소드를 지원하고 있을 때, 클라이언트가 서버로 TRACE 요청을 보

itinformation.tistory.com

 

'WEB > WEB Hacking' 카테고리의 다른 글

Webhacking.kr Challenge(old) 23번 풀이  (0) 2021.11.15
[Webhacking.kr] Challenge(old) 55번 풀이  (0) 2021.11.10
wfuzz  (0) 2021.07.10
[Webhacking.kr] Challenge(old) 39번 풀이  (0) 2021.06.07
[Webhacking.kr] Challenge(old) 38번 풀이  (0) 2021.06.04

AndroidManifest.xml의 android:debuggable="true"일때

1. adb shell 접속
cmd >> adb shell
adb >> su

2. PID 확인
adb >> ps | grep "앱이름"

3. dumpheap을 이용한 메모리 덤프
adb >> am dumpheap PID /data/local/tmp/test.hprof
adb >> cm /data/local/tmp
adb >> chmod 777 test.hprof
adb >> strings test.hprof > test.txt

4. 덤프파일 PC로 가져오기
cmd >> adb pull /data/local/tmp/test.txt C:\Users\admin\Desktop

'Study > Mobile' 카테고리의 다른 글

안드로이드 - 루팅 & 순정 복구  (1) 2023.11.14
Android - 리패키징  (0) 2023.10.06
Android - Frida 후킹  (2) 2023.10.06
Android 취약점 진단 시 참고  (0) 2022.11.29

Request

HTTP  프로토콜 메소드 : GET

리소스 경로 : /%ED%8F%89%ED%99%94%EB%A1%9C%EC%9A%B4%EB%A7%88%EC%9D%8C

HTTP 프로토콜 버전 : HTTP/1.1

 

User-Agent (브라우저) : Mozilla/5.0

OS 정보 : (Windows NT 10.0; Win64; x64) ##NT 10.0은 Windows 10, 윈도우 서버 2016

브라우저 엔진 : AppleWebKit/537.36 (KHTML, like Gecko)

 

Response

HTTP 프로토콜 버전 : HTTP/1.1

응답 결과 : 301 Moved Permanently

서버 : Server: nginx

(301 moved) 옮겨진 URL 주소: Location: ~~?pwd=~~

'Study > NETWORK' 카테고리의 다른 글

HTTP 업로드 실패 패킷  (0) 2021.03.31
HTTP 간단 요청 패킷  (0) 2021.03.31
Wireshark를 통한 네트워크 패킷 분석 ①  (0) 2021.03.12

Network Security

NSG(Network Security Group)

- 가상 네트워크 트래픽 제한

- 서브넷 또는 네트워크 인터페이스에 연결

- 보안 규칙을 사용하여 네트워크 트래픽 allow 또는 deny

- subnet과 NIC 둘 다에 NSG 설정 시, 두 수준 모두에 allow 규칙이 있어야 트래픽이 허용됨(subnet 및 NIC에 대해 독립적으로 평가됨)

 

Load Balancing

ASG(Application Security Groups)

- 가상 머신(웹 서버, 애플리케이션 서버)을 논리적으로 그룹화

- 트래픽 흐름을 제어하는 규칙 정의

- 보안을 강화하기 위해 ASG를 NSG로 포장

 

Service Endpoint

- VNet(가상 네트워크) Service Endpoint는 Azure 백본 네트워크에서 최적화된 경로를 통해 Azure 서비스에 대한 안전한 직접 연결을 제공한다. 

- Service Endpoint를 사용하면 가상 네트워크에 대해 중요한 Azure 서비스 리소스를 보호할 수 있다. 

- VNet에 public IP 주소가 없어도 private IP 주소를 통해 Azure Service Endpoint에 연결할 수 있다.

service endpoint


실습) NSG, ASG
조직에는 두 개의 서버 그룹이 있다. 웹 서버 및 관리 서버. 각 서버 그룹은 자체 ASG에 있어야 한다.
관리 서버로 RDP를 전송할 수 있어야 하고, 웹 서버는 인터넷에서 액세스할 때 IIS 웹 페이지를 표시해야 한다.
또한 트래픽이 올바르게 라우팅되도록 하려면 NSG를 만들어야 한다.

실습 구성도
NSG

가상 네트워크 myVirtualNetwork를 만들고, mySubnet이라는 서브넷을 만든 후

myNSG라는 네트워크 보안 그룹을 생성하여 이 서브넷에 연결시킨다.

 

Inbound 규칙 추가

myNSG에 Inbound 규칙을 추가한다.

myAsgWebServers ASG에는 80,443 포트로 들어오는 것을 허용하고 (웹)

myAsgMgmtServers ASG에는 3389 포트로 들어오는 것을 허용한다. (원격 접속)

myVmMgmt

myVmMgmt 로 원격 접속을 한 후, 여기서 myVmWeb에 원격 접속을 한다.

myVmMgmt는 원격 접속 포트를 허용해줬기 때문에 외부에서 들어올 수 있지만,  myVmWeb은 허용하지 않았기 때문에 외부에서 곧바로 접속이 불가능하기 때문이다.

외부에서 접속

myVmWeb에서 powershell 명령어를 통해 웹 서버를 설치하고

(Install-WindowsFeature -name Web-Server -IncludeManagementTools)

public IP를 확인한 후, 접속해본다. 80,443번 포트로 들어오는 것을 허용해놨기 때문에 접속에 성공할 수 있다. 


Host Security(Server)

Endpoint Protection

- Endpoint System : 사용자와 직접 상호 작용하는 컴퓨터 시스템

- 엔드포인트를 보호하기 위해서 맬웨어 방지 솔루션 설치. Cloud와 통합하여 상태를 모니터링할 수도 있다.

Virtual Machine Templates
- Resource Manager Templates를 사용하여 VM을 정의한다. 
이를 사용하면 VM을 쉽게 배포 그리고 다시 배포할 수 있다. 새로 업데이트되어 보안이 강화된 OS를 강제로 배포하려는 경우 VM을 주기적으로 다시 배포하는 것이 좋은데, 템플릿을 사용하면 쉽게 배포가 가능하다.

Remote Access Management
- Windows 기반 가상 시스템을 위한 RDP(원격 데스크톱 프로토콜)
- Linux 기반 가상 시스템을 위한 SSH(Secure Shell Protocol)
- SSL을 통한 포털을 통한 RDP/SSH의 기반 서브넷

Update Management
- 전반적으로 업데이트 상태를 평가하고 on-premise 및 Azure 환경에 대해 Windows 서버 및 Linux 서버 업데이트를 관리할 수 있다.

Disk Encryption
- 운영 체제 및 데이터 디스크를 암호화하여 제공할 수 있다.
- Windows는 BitLocker, Linux는 DM-Crypt 이용
- Azure Key Vault와 통합되어 디스크 암호화 키 및 비밀을 제어 및 관리할 수 있다. 


Container Security

ACI(Azure Container Instance)
: 간단한 애플리케이션, 작업 자동화 및 빌드 작업 등 컨테이너에서 작동하는 시나리오용 PaaS 서비스
- 빠른 시작 시간(Azure에서 몇 초만에 컨테이너를 시작할 수 있음) / Public IP 와 DNS로 컨테이너 액세스 가능 / 애플리케이션이 VM에 있는 것처럼 컨테이너에서 격리되도록 보장

 

※ 1. 도커 호스트가 vm 인 경우 docker를 설치하고 로그인을 한 후에 image를 Azure Container Registry에 있는 걸 다운
※ 2. 도커 호스트가 Azure Container Instance인 경우에 docker를 설치하지 않고 Azure Conatainer Registry 에 있는 걸 바로 다운받아 서비스 할 수 있음
(ACI가 좋은 이유는 Public IP가 컨테이너마다 부여되고, docker를 따로 안깔아도 된다는 점)

ACR(Azure Container Registry)
: 컨테이너 이미지를 저장하고 배포하는 서비스
- Azure CLI 또는 표준 docker login 명령을 사용하여 레지스트리에 로그인 >  Azure Container Registry는 HTTPS를 통해 컨테이너 이미지를 전송하고 TLS를 지원하여 클라이언트 연결을 보호
- RBAC(역할기반 액세스 컨트롤) 을 사용하여 사용자 또는 시스템에 세분화된 권한을 레지스트리에 할당할 수 있음

 

AKS(Azure Kubuernetes Service)
컨테이너 기반 애플리케이션 배포 및 관리를 간소화하는 서비스


실습) ACR과 AKS 구성하기 & 보안 활동
1. Dockerfile을 사용하여 이미지를 빌드
2. Azure Container Registry를 사용하여 이미지 저장
3. Azure Kubernetes 서비스를 구성
4. 내부 및 외부 모두에서 컨테이너 애플리케이션을 보호하고 액세스

먼저, 환경 구성

New-Item -Path "C:\" -Name "LabFiles" -ItemType "directory"

Start-BitsTransfer -Source 'https://github.com/MicrosoftLearning/AZ500-AzureSecurityTechnologies/archive/master.zip' -Destination C:\LabFiles

Expand-Archive -Path 'C:\LabFiles\master.zip' -DestinationPath 'C:\LabFiles'

Move-item -Path "C:\LabFiles\AZ500-AzureSecurityTechnologies-master\AllFiles\Labs\09*" -Destination "C:\LabFiles" -confirm:$false

실습 구성도

  • Task 1: Create an Azure Container Registry
az group list --query "[?name=='AZ500LAB09']" -o table
az acr create --resource-group AZ500LAB09 --name az500$RANDOM$RANDOM --sku Basic
az acr list --resource-group AZ500LAB09

Azure Cloudshell (bash)를 이용해

image를 저장할 Azure Container Regisrty를 생성한다.

  • Task 2: Create a Dockerfile, build a container and push it to Azure Container Registry
echo FROM nginx > Dockerfile
ACRNAME=$(az acr list --resource-group AZ500LAB09 --query '[].{Name:name}' --output tsv)
az acr build --image sample/nginx:v1 --registry $ACRNAME --file Dockerfile .

nginx 이미지를 담고있는 Dockerfile을 이용해 컨테이너를 생성하고, Task1에서 만들었던 ACR에 넣어준다.

 

  • Task 3: Create an Azure Kubernetes Service

Kubernetes Service를 하나 생성하고 배포된 것을 확인한다.

 

  • Task 4: Give AKS permission to access the ACR

이전에 생성한 Azure Container Registry 인스턴스를 사용하도록 AKS 클러스터를 구성한다.

 

  • Task 5: Deploy an external facing container from ACR to AKS

처음에 받아뒀던 파일을 cloudshell 업로드/다운로드 기능을 활용하여 업로드한다.
yaml 파일 24번째 줄에서 내가 만든 ACR 이름으로 바꿔줘야 한다.

 

  • Task 6: Verify you can access the container externally

 

  • Task 7: Deploy an internal facing container from ACR to AKS

external yaml 파일과 똑같이 24번째 줄에서 수정을 하고

 

  • Task 8: Verify you can access the container internally

external pod에서 internal pod가 동작중인지 확인해본다.


실습 2) Azure Kubernetes Service 이용
이 때 image는 Azure Container Registry에 저장된 것을 사용

① Resouce Group 생성
② ACR를 GUI로 생성하세요
ACR 서버 : yerimcr.azurecr.io
ACR Username : yerimcr
Password : Kv1=A1A60MDBp5kSRI7m6GLP/qu5JMaY

③ CentOS VM을 하나 생성하여 docker를 설치합니다.
yum install epel-release -y
yum update -y
vi /etc/sysconfig/selinux --> selinux=disabled로 수정
reboot
curl -sSL http://get.docker.com | bash
systemctl start docker

④ nginx, jesuswithme/verify-pod를 다운로드하여 nginx는 내용을 수정하세요
docker pull nginx
docker pull jesuswithme/verify-pod
docker run -d --name testing -p 80:80 nginx
docker exec -it testing /bin/bash
/# find -name "index.html" >> index.html 수정하기 위해 위치를 찾고
/# echo "Hello" > ./usr/share/nginx/html/index.html
/# exit
(VM으로 만든 컨테이너는 http://VM의publicIP:컨테이너포트번호로 확인한다)

⑤ ACR에 맞는 tag를 넣어서 이미지를 생성합니다.
docker tag 이미지 ACR서버/ACR에저장할이미지이름:태그명
docker commit 컨테이너ID ACR서버/ACR에저장할이미지이름:태그명
(docker images 하면 확인가능)

⑥ VM에서 ACR에 Image를 업로드합니다
docker login ACR서버 -u ACRusername
docker push ACR서버/이미지이름:태그명
(이제 ACR에서 올라간 이미지 확인 가능!!)

⑦ ACI에서 Container를 실행합니다
생성 중간에 Azure Container Registry 선택 후 여기에 업로드 한 이미지로 생성
생긴 Container의 Public IP로 접속

⑧ AKS를 구성합니다.

⑨ AKS에서 Deployment와 Service를 생성하여 Pod에 접속하게 합니다. 
yaml파일을 이용하려면 VM에서 다운로드하여 사용하세요
(vm) curl -sSL http://down.cloudshell.kr/down/k8slab.sh | bash
(vm) ls -l
(vm) cd k8s
(vm) cat 명령어로 deployment 대한 yaml 파일 확인하고 복사

AKS에서 deployment를 생성(복사한 yaml파일 활용)

(Cloudshell-Bash) az aks get-credentials -g yerimRG -n yrkube
(Cloudshell-Bash) kubectl get deployment -o wide
(Cloudshell-Bash) kubectl expose deployment app-deploy  --port=80 --type=LoadBalancer
(Cloudshell-Bash) kubectl get svc -o wide >>서비스 Public IP로 접속

'Study > Cloud' 카테고리의 다른 글

AZ500 (Azure Firewall 구현)  (0) 2022.08.18
AZ500 (Implement Platform Protection)  (0) 2022.08.18
AZ500 (Hybrid Identity)  (0) 2022.08.18
AZ500 (Identity and Access)  (0) 2022.08.17
AZ104 (NAT)  (0) 2022.08.12

+ Recent posts