QueryPie์ gRPC ๋ณด์: ZAP ์คํฌ๋ฆฝํธ ์ ์ฉ ์ฌ๋ก
QueryPie๋ ๋์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ํด gRPC ํต์ ๋ฐฉ์์ ์ฑํํ์ต๋๋ค. gRPC๋ HTTP/2 ๊ธฐ๋ฐ์ ๊ณ ํจ์จ ํต์ ํ๋กํ ์ฝ๋ก, ํ๋กํ ์ฝ ๋ฒํผ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ๊ฒฝ๋ํ๋ ํํ๋ก ์ ์กํจ์ผ๋ก์จ ๋คํธ์ํฌ ์์์ ํจ์จ์ ์ผ๋ก ํ์ฉํฉ๋๋ค. ๋ํ, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์๋ฐฉํฅ ์คํธ๋ฆฌ๋ฐ์ ์ง์ํ์ฌ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋ค์ํ ์ธ์ด์ ํ๋ซํผ๊ณผ์ ํธํ์ฑ๋ ๋ฐ์ด๋ฉ๋๋ค. ์ด ๋ฐฑ์์์๋ gRPC๋ก ๊ตฌํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ผ๋ก ์ทจ์ฝ์ ์ง๋จํ๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ฃผ์ ์ด์๋ฅผ ์ดํด๋ณด๊ณ , ์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ์์ ์ ์ํฉ๋๋ค.
gRPC ์ทจ์ฝ์ ์ง๋จ, ์ ์ด๋ ค์ธ๊น?
HTTP/2์ ๋ฐ์ด๋๋ฆฌ ํฌ๋งท์ ํ ์คํธ ๊ธฐ๋ฐ์ HTTP/1.1๊ณผ ๋ฌ๋ฆฌ, ์์ฒญ ๋ฐ ์๋ต์ ๋ด์ฉ์ ์ผ๋ฐ์ ์ธ ํ๋ก์ ๋๊ตฌ(์: Burp Suite, ZAP)๋ก ์ฝ๊ฒ ์ฝ๊ฑฐ๋ ์์ ํ ์ ์๊ฒ ๋ง๋ญ๋๋ค. gRPC๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ํฌ๋งท์ผ๋ก Protocol Buffers (Protobuf)๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๋ JSON์ด๋ XML๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ด๋๋ฆฌ ํฌ๋งท์ด๋ฏ๋ก ๋ถ์์ด ๊น๋ค๋กญ์ต๋๋ค.
๋ค์์ gRPC๋ก ๊ตฌํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ํจํท์ ์์๋ฅผ ์ดํด๋ณด๋ฉด, POST ์์ฒญ ๋ฐ์ดํฐ๋ ์ธ๋ป ๋ณด๋ฉด โcatโ์ด๋ผ๋ ๋ฌธ์๊ฐ Base64๋ก ์ธ์ฝ๋ฉ๋์ด ์์ ๋ฟ์ผ๋ก ๋ณด์ ๋๋ค.


ํ์ง๋ง 'cat'์ด๋ผ๋ ๋ฌธ์๋ฅผ ๋ค์ base64๋ก ์ธ์ฝ๋ฉํด ๋ณด๋ฉด ๊ธฐ์กด POST ๋ฐ์ดํฐ์ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ์ ์์ผ๋ฉฐ, ์๋ฒ์์๋ ํด๋น ์์ฒญ์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.


gRPC ๋ฐ์ดํฐ๋ .proto ํ์ผ์ ํตํด ๋ฉ์์ง ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ณ ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ ์์ ์ ์ถ๊ฐ๋ก ์ํ์ด ํ์ํ์ง๋ง, ๋๋ถ๋ถ์ ํ๋ก์ ๋ฐ DAST ๋๊ตฌ๋ gRPC ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๊ฑฐ๋ ์ ํ์ ์ผ๋ก๋ง ์ง์ํฉ๋๋ค. ๋ํ ์ด๋ฌํ ์์ ์ ์๋์ผ๋ก ๋ฐ๋ณต ์ํํ๋ฉด์ ์ทจ์ฝ์ ์ง๋จ์ ํ๋ ค๋ฉด ๋๋ฌด ๋ง์ ์๊ฐ์ ํฌ์ํด์ผํ๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์ผ๋ก DAST ์ค์บ ์ gRPC ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ ์์ ๊ณผ ์ทจ์ฝ์ ์๋ณ์ ์๋์ผ๋ก ์ํํ์ฌ ์์ฐ์ฑ์ ์ฆ๊ฐ์ํฌ ํ์๊ฐ ์์ต๋๋ค.
ํจ์จ์ ์ธ gRPC ์ทจ์ฝ์ ์ง๋จ์ ์ํ ZAP ํ์ฉ๋ฒ
ZAP์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ทจ์ฝ์ ์ง๋จ์ ์์ฃผ ์ฌ์ฉ๋๋ ํ๋ก์ ๋ฐ DAST ๋๊ตฌ์ ๋๋ค. ์ปค์คํ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ํตํ์ฌ ์๋ ์ค์บ ๊ณผ์ ์์ ๋ก์ปฌ์ ํ์ผ์ ์คํํ๊ฑฐ๋ ๋ค๋ฅธ ์์ ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด gRPC POST ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ ํ ๊ณต๊ฒฉ ํ์ด๋ก๋๋ฅผ ์ฝ์ ํ๊ณ ๋ค์ ์ธ์ฝ๋ฉํ์ฌ ์ ์กํ ์ ์์ต๋๋ค. ๋ํ, gRPC ์๋ฒ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ์ฌ ๋ถ์ํจ์ผ๋ก์จ ์ทจ์ฝ์ ์ ํ์ธํ๋ ๊ณผ์ ์ ์๋ํํ ์ ์์ต๋๋ค.
ECMAScript(Graal.js) ์์ง์ ์ฝ๋ฉ์ด๋ผ๋ ์๋จ์ ์ ๊ณตํ๋ค๋ ์ ์์ ์ง๋จ์์๊ฒ ๋์ ์์ ๋๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ก์ปฌ์์ ์ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํด ๋ค์ํ ์์ ์ ์ ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.

gRPC ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ ์๋ํ
์๋ ๋งํฌ์ grpc-pentest-suite ์คํฌ๋ฆฝํธ์์๋ gRPC ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ ์๋ํ์ ํ์ํ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํ๋๋ฐ, ZAP ์ปค์คํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ๋ช ๋ น์ด๋ฅผ ํจํท ๋ณ์กฐ ๊ณผ์ ์ ์ ์ ํ ์์ ์ ์คํ๋๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- grpc-pentest-suite ์คํฌ๋ฆฝํธ: GitHub - nxenon/grpc-pentest-suite: gRPC-Web Pentesting Suite + Burp Suite Extension
- gRPC ์ธ์ฝ๋ฉ ๋ช
๋ น์ด:
/Users/noah/go/bin/protoscope -s plain.txt | python3 ./grpc-coder.py --encode --type grpc-web-text - gRPC ๋์ฝ๋ฉ ๋ช
๋ น์ด:
echo "AAAAAAUKA2NhdA==" | python3 grpc-coder.py --decode --type grpc-web-text | /Users/noah/go/bin/protoscope

์ดํ์ ํ์งํ๊ณ ์ ํ๋ ํญ๋ชฉ์ ๋ฐ๋ผ ์ทจ์ฝ์ ํ์ง ์กฐ๊ฑด์ ์ ์ํ๊ณ , ํด๋น ํ์ง ์กฐ๊ฑด์ ๋ฐ๋ผ์ ์ทจ์ฝ์ ์ด ๋ฐ๊ฒฌ๋๋ฉด ZAP ๊ฒฝ๊ณ ํญ์์ ํ์ง ์๋ฆผ์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.

์ทจ์ฝ์ ํ์ง ์ฌ๋ก
์๋ ๋์์์ SQL Injection ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ gRPC ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ZAP ์ปค์คํ ์คํฌ๋ฆฝํธ๋ฅผ ํตํ์ฌ ์ทจ์ฝ์ ์ ์๋์ผ๋ก ์๋ณํ๊ณ ๊ฒฝ๊ณ ํญ์์ ํ์ง ์๋ฆผ์ ๋ฐ์์ํค๋ ๋ชจ์ต์ ๋ณด์ฌ์ค๋๋ค.
๊ฒฐ๋ก ๋ฐ ์ ์
gRPC๋ ํจ์จ์ ์ด๊ณ ๊ณ ์ฑ๋ฅ์ ํต์ ๋ฐฉ์์ ์ ๊ณตํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํน์ฑ์ผ๋ก ๋ฐ์ํ ์ ์๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ ํํ๊ฒ ์ ๊ฒํ๊ณ ํด๊ฒฐํ๋ ์ผ์ ์ฌ์ ํ ํฐ ๋์ ๊ณผ์ ์ ๋๋ค. ํนํ, gRPC์ ๋ฐ์ด๋๋ฆฌ ํ์๊ณผ ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ก ์ธํด ๊ธฐ์กด์ ๋ณด์ ์ง๋จ ๋๊ตฌ๋ค์ด ์ง๊ด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ง์ ๊ธฐ์ ๋ค์ด DAST ๋๊ตฌ๋ฅผ CI/CD ํ์ดํ๋ผ์ธ์ ์ ์ฉํด ์ทจ์ฝ์ ์ค์บ์ ์ํํ๊ณ ์์ง๋ง, ์๋ฆฌ์ผ๋ผ์ด์ง, ์ธ์ฝ๋ฉ, ์ํธํ ํ๊ฒฝ์ ๊ณ ๋ คํ์ง ์๊ฑฐ๋ ํ์์ ์ผ๋ก๋ง ์ค์บ์ ์งํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ํ๊ณ๋ก ์ธํด ์ค์ ๋ก ๋ฐ์ํ ์ ์๋ ์ทจ์ฝ์ ์ ์ถฉ๋ถํ ํ์งํ์ง ๋ชปํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
QueryPie๋ ZAP ์ปค์คํ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ์ฌ gRPC์ ์ธ์ฝ๋ฉ๊ณผ ๋์ฝ๋ฉ์ ์๋ํํ๊ณ , ์์ฌ gRPC ๊ธฐ๋ฐ ์ ํ์ ๋ณด์ ์ทจ์ฝ์ ์ ์๋์ผ๋ก ์๋ณ, ๋ถ์ ๋ฐ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ณด์ ๋ด๋น์๋ ์๋์ผ๋ก ์งํ๋๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ๋ค์ ์๋ํํ์ฌ, ๋ณด์ ๊ฐ์ฌ์ ์ทจ์ฝ์ ๋ถ์์ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด ๋ฐฑ์์์ ์ ์๋ ํด๊ฒฐ์ฑ ์ gRPC๋ฅผ ์ฌ์ฉํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ ์ ์๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ๋ฏธ๋ฆฌ ์๋ฐฉํ๊ณ , ์ง์์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์์ผ๋ก๋ QueryPie๋ ๋ณด์ ์ง๋จ์ ์ ํ๋๋ฅผ ๋์ด๊ณ , ๋ณด์ ๊ด๋ฆฌ์ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก์ ์ง์์ ์ผ๋ก ๋ฐ์ ํ์ฌ, ๊ธฐ์ ๋ค์ ์ ๋ขฐ์ฑ์ ๊ฐํํ ๊ฒ์ ๋๋ค.
