Blog all

  • OAuth 2.0 Basics – 2. Roles

    ์šฐ๋ฆฌ๊ฐ€ ์ผ์ •๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Xscheduler)์„ ๊ฐœ๋ฐœํ•˜๋Š” ํŒ€์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ผ์ •์„ ์ž๋™์œผ๋กœ ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”์— ์ถ”๊ฐ€ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Xscheduler๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”์— ์ง€์†์ ์œผ๋กœ ์ผ์ •์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด OAuth ์ธ์ฆ์„ ํ†ตํ•ด ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ํš๋“ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    OAuth ์ธ์ฆ ๊ณผ์ •์—๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ฃผ์ฒด๊ฐ€ ๊ด€์—ฌํ•ฉ๋‹ˆ๋‹ค: ์‚ฌ์šฉ์ž(User), ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Xscheduler), ๊ทธ๋ฆฌ๊ณ  ๊ตฌ๊ธ€์ž…๋‹ˆ๋‹ค. OAuth์—์„œ๋Š” ์ด๋“ค์„ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์šฉ์–ด๋กœ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค.

    ๋จผ์ € ์‚ฌ์šฉ์ž๋Š” Resource Owner๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ‘๊ทผํ•˜๋ ค๋Š” ๋ฆฌ์†Œ์Šค(๊ตฌ๊ธ€์˜ ์บ˜๋ฆฐ๋”)์˜ ์‹ค์ œ ์†Œ์œ ์ž๊ฐ€ ์‚ฌ์šฉ์ž์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ตฌ๊ธ€์€ Resource Server๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š”๋ฐ, ์ด๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์‹ค์ œ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋ฒ„์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

    ๋งˆ์ง€๋ง‰์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Xscheduler)์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ๊ฐ์ด๊ธฐ ๋•Œ๋ฌธ์—(์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ผ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž…๋‹ˆ๋‹ค) Client๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ

    • ์‚ฌ์šฉ์ž – Resource Owner(R.O)
    • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ – Client(C)
    • ๊ตฌ๊ธ€ ์„œ๋ฒ„ – Resource Server(R.S)

    ์˜ ์„ธ๊ฐ€์ง€์˜ ์ฃผ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    OAuth์—์„œ ์ด ๊ฐ ์ฃผ์ฒด๋Š” role(์—ญํ• )์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

    (์‹ค์ œ๋กœ OAuth ์ธ์ฆ์— ๊ด€์—ฌํ•˜๋Š” ์ฃผ์ฒด๋Š” Authorization Server๋ฅผ ํฌํ•จํ•˜์—ฌ 4๊ฐœ์ž…๋‹ˆ๋‹ค. Authorization Server๋Š” OAuth ์ธ์ฆ ๊ณผ์ •์—์„œ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒฝ์šฐ Authorization Server์™€ Resource Server๊ฐ€ ๊ฐ™์€ ํšŒ์‚ฌ์—์„œ ์šด์˜๋˜๊ฑฐ๋‚˜ ํ†ตํ•ฉ๋˜์–ด ์žˆ์–ด์„œ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‘ ์„œ๋ฒ„ ๋ชจ๋‘ ๊ตฌ๊ธ€์—์„œ ์šด์˜ํ•˜๋ฏ€๋กœ, ํŽธ์˜์ƒ “๊ตฌ๊ธ€”์ด๋ผ๊ณ  ํ†ต์นญํ•˜์—ฌ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

  • OAuth 2.0 Basics – 1. Introduction

    ํ˜„์žฌ ์ˆ˜๋งŽ์€ ๊ณ ํ’ˆ์งˆ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์กด์žฌํ•˜๋Š” ์‹œ๋Œ€์—์„œ OAuth๋ฅผ ํ†ตํ•œ ๋‹ค๋ฅธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—ฐ๋™์€ ๊ฑฐ์˜ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ OAuth๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž์™€ ์ •๋ณด๋ณด์•ˆ ๋‹ด๋‹น์ž๋“ค์—๊ฒŒ๋Š” OAuth์— ๋Œ€ํ•œ ์‹ฌ๋„ ์žˆ๋Š” ์ดํ•ด๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ OAuth๋Š” ๋‹ค์†Œ ๋†’์€ ํ•™์Šต ๊ณก์„ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ ๊ณผ์ •์— ์ฐธ์—ฌํ•˜๋Š” ์—ฌ๋Ÿฌ ์ฃผ์ฒด๋“ค๊ณผ ์ด๋“ค ๊ฐ„์˜ ๋ณต์žกํ•œ ์ƒํ˜ธ์ž‘์šฉ ํ๋ฆ„, ๊ทธ๋ฆฌ๊ณ  ์ด ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์ ๋“ค์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ JWT, OpenID Connect(OIDC), PKCE์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ‘œ์ค€๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„, OAuth๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ์ฝ” ์‰ฌ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

    OAuth๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € OAuth ์ธ์ฆ ํ๋ฆ„์— ์ฐธ์—ฌํ•˜๋Š” ๊ฐ ์ฃผ์ฒด๋“ค์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • OAuth 2.0: Benefits and Security Considerations

    ์„œ๋น„์Šค ์—ฐ๋™ ์‹œ๋Œ€์˜ ํ•„์ˆ˜ ๊ธฐ์ˆ 

    ํ˜„๋Œ€ ์›น ์ƒํƒœ๊ณ„์—์„œ๋Š” ์ˆ˜๋งŽ์€ ์ „๋ฌธํ™”๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ๊ธฐ์กด์˜ ๊ฒ€์ฆ๋œ ์„œ๋น„์Šค๋“ค์„ ์—ฐ๋™ํ•˜์—ฌ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๊ณ  ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋Š” ์ง„์ •ํ•œ ‘์„œ๋น„์Šค ์—ฐ๋™์˜ ์‹œ๋Œ€’๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    OAuth์˜ ํ•ต์‹ฌ ๊ฐ€์น˜

    1. ํŽธ๋ฆฌํ•œ ์ธ์ฆ ๊ฒฝํ—˜

    OAuth๊ฐ€ ์—†๋‹ค๋ฉด ์จ๋“œํŒŒํ‹ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ)๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. OAuth๋Š” ์ตœ์ดˆ ํ•œ ๋ฒˆ์˜ ์ธ์ฆ๋งŒ์œผ๋กœ ์žฅ๊ธฐ๊ฐ„ ๋™์•ˆ ์ง€์†์ ์ธ ์žฌ์ธ์ฆ ์—†์ด ์จ๋“œํŒŒํ‹ฐ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

    2. ๋ณด์•ˆ์„ฑ ํ–ฅ์ƒ

    ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์‹ค์ œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์จ๋“œํŒŒํ‹ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง์ ‘ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  OAuth๋ฅผ ํ†ตํ•ด ์ œํ•œ๋œ ๊ถŒํ•œ๋งŒ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ„์ž„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

    ์ผ์ • ๊ด€๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”์™€ ์—ฐ๋™ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

    1. ๊ธฐ์กด ๋ฐฉ์‹: ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ • ๊ด€๋ฆฌ ์•ฑ์— ๊ตฌ๊ธ€ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง์ ‘ ์ž…๋ ฅ
      • ๋ณด์•ˆ ์œ„ํ—˜์„ฑ ๋†’์Œ
      • ์จ๋“œํŒŒํ‹ฐ ์•ฑ์ด ๊ตฌ๊ธ€ ๊ณ„์ •์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ฒŒ ๋จ
    2. OAuth ๋ฐฉ์‹: ๊ตฌ๊ธ€์˜ ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ ์•ˆ์ „ํ•œ ๊ถŒํ•œ ์œ„์ž„
      • ์ตœ์ดˆ ํ•œ ๋ฒˆ์˜ ์ธ์ฆ ํ›„, ์ผ์ • ๊ด€๋ฆฌ ์•ฑ์ด ์ง€์†์ ์œผ๋กœ ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
      • ์‚ฌ์šฉ์ž์˜ ์‹ค์ œ ๋กœ๊ทธ์ธ ์ •๋ณด๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ
      • ํ•„์š”ํ•œ ๊ถŒํ•œ(์บ˜๋ฆฐ๋” ์ฝ๊ธฐ/์“ฐ๊ธฐ)๋งŒ ์ œํ•œ์ ์œผ๋กœ ๋ถ€์—ฌ

    OAuth์˜ ์ค‘์š”์„ฑ๊ณผ ์ฃผ์˜์‚ฌํ•ญ

    OAuth๋Š” ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์ˆ˜๋ถˆ๊ฐ€๊ฒฐํ•œ ๊ธฐ์ˆ ๋กœ ์ž๋ฆฌ์žก์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์‹œ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์ง€ ์•Š์œผ๋ฉด ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์š” ๋ณด์•ˆ ์œ„ํ—˜

    • ๋ถ€์ ์ ˆํ•œ ๊ตฌํ˜„์œผ๋กœ ์ธํ•œ ๊ณ„์ • ํƒˆ์ทจ ์œ„ํ—˜
    • ๊ถŒํ•œ ๋ฒ”์œ„(scope) ๊ด€๋ฆฌ ๋ฏธํก
    • ํ† ํฐ ๊ด€๋ฆฌ ๋ฐ ๊ฐฑ์‹  ๊ณผ์ •์—์„œ์˜ ๋ณด์•ˆ ํ—ˆ์ 
    • CSRF, ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๊ณต๊ฒฉ ๋“ฑ์˜ ์ทจ์•ฝ์ 

    ๋”ฐ๋ผ์„œ OAuth๋ฅผ ๋„์ž…ํ•  ๋•Œ๋Š” ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ฒ ์ €ํžˆ ์ค€์ˆ˜ํ•˜๊ณ , ์ •๊ธฐ์ ์ธ ๋ณด์•ˆ ์ ๊ฒ€์„ ํ†ตํ•ด ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Before diving into BFLA, letโ€™s clarify what โ€œfunctionโ€ actually means in BFLA

    BFLA stands for Broken Function Level Authorization.

    Simply put, BFLA involves performing โ€œactionsโ€ that go beyond a userโ€™s authorized permissions.

    In typical API usage, the term โ€œfunctionโ€ usually refers to an API endpoint with all HTTP methods including GET. However, in the context of BFLA, it carries a slightly different meaning โ€” referring to privileged operations or functionalities that require proper authorization. With the GET method, requests are used only to read data, not to modify it. Thus, it does not align with the definition of a โ€œfunctionโ€ as described in BFLA.

    โ€œActionsโ€ in this context typically involve HTTP methods other than GET, such as POST, PUT, or DELETE, since these methods are used to modify data rather than just read it.

    Similarly, in BFLA, a โ€œFunctionโ€ often represents an operation that changes system state or performs a sensitive task โ€” not just a simple data retrieval.

    However, it’s important to note that GET requests can still be part of a BFLA vulnerability โ€” for example, if a user without admin privileges is able to access sensitive admin-only information via a GET request. Even though the request doesn’t change data, the ability to retrieve unauthorized information still represents a failure in function-level authorization.

    Here are two common methods for testing BFLA vulnerabilities:

    1. Try different HTTP methods (e.g., changing GET to POST, or GET to DELETE)
    2. Manipulate parameters within the request (e.g., DELETE /api/users/999 – An unauthorized user attempts to perform a delete operation on user 999.)

  • Essential Burp Suite Tips for Beginners #1 – Scope

    Burp Suite can be overwhelming at first โ€” the endless HTTP requests and the sheer number of tabs and settings often confuse beginners. I was no exception.

    Using scope can be especially helpful if you have multiple tabs open in your browser. It allows you to browse other websites while targeting a specific one in Burp Suite.

    In the above example, you can see there are tons of requests. You probably donโ€™t want unnecessary ones getting in your way.

    If you’re visiting multiple websites but only targeting a few, you can define your scope in Burp Suite under the “Target” tab. You can also set the scope by right-clicking on a request and selecting “Add to scope.”

    Now that you’ve set the scope in Burp Suite, other webpages are no longer logged in the history. Youโ€™re free to Google, use ChatGPT, or browse the web without cluttering your logs

  • Why Cybersecurity Is a Promising Career Path?

    Cybersecurity offers an excellent career outlook with strong growth potential and job security. According to the U.S. Bureau of Labor Statistics, Information Security Analysts ranked as the 5th fastest-growing occupation from 2023 to 2033.

    Supporting Reasons

    1. Increasing cyber threats – As digital transformation accelerates, cyberattacks are becoming more frequent and sophisticated, creating greater demand for security professionals.
    2. Slow AI replacement – Cybersecurity roles require human judgment, creativity, and strategic thinking that AI cannot easily replicate, making these positions more resistant to automation.
    3. High demand across industries – Every sector from healthcare to finance to government needs cybersecurity expertise, creating diverse opportunities.
    4. Stricter regulations – New compliance requirements and data protection laws are driving organizations to invest more heavily in cybersecurity talent.

    Consider This Opportunity

    With all these positive factors in mind, cybersecurity education could be worth exploring. It might be an interesting path to consider – a field that not only offers strong job prospects but also provides the satisfaction of doing meaningful work that helps protect organizations from digital threats.

    Reference: https://www.bls.gov/ooh/fastest-growing.htm

  • What is an API?

    API stands for Application Programming Interface, which refers to a programming interface (intermediary) that allows two applications to communicate with each other.

    In the case of Web APIs, these two applications refer to the frontend and backend of a web application. The frontend is the interface part of the website that users see, enabling interaction with the server through login windows, order buttons, text input fields, and more. The backend, on the other hand, handles the database that stores data and the business logic that processes requests received from the frontend.

    Let’s take searching for hamburger restaurants on Google as an example. When you type “hamburger restaurants” in the search box and press enter, the browser requests the necessary information from Google’s server through an API. The server receives this API request, processes it, and then sends the search result data back to the user as a response. This is a typical example of API communication.

    Simply put, an API is a tool that websites use to exchange data with servers.