2024-04-26.md

๐Ÿก

DIL: ๋ชจ๋˜ ๋ฆฌ์•กํŠธ ๋”ฅ ๋‹ค์ด๋ธŒ, 8์ฃผ์ฐจ-

์Šคํ„ฐ๋””: ์›”๊ฐ„ CS, https://github.com/monthly-cs/2024-03-modern-react-deep-dive
์˜ค๋Š˜ ์ง„ํ–‰: ๊ฐœ์ธ๊ณต๋ถ€


DIL-week6-_2024-04-26

| DIL ์ฃผ์ฐจ | ๋ฒ”์œ„ | ๋‚ด์šฉ | ์˜ค๋Š˜์ฐจ ์ง„๋„ | | -------- | ---------- | -------------------------------------------------------- | ----------- | | 8์ฃผ์ฐจ | 14์žฅ, 15์žฅ | ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์„ ์œ„ํ•œ ๋ฆฌ์•กํŠธ์™€ ์›นํŽ˜์ด์ง€ ๋ณด์•ˆ ์ด์Šˆ, ๋งˆ์น˜๋ฉฐ | 884~902p |

์˜ค๋Š˜ ์ฝ์€ ๋‚ด์šฉ์„ markdown์œผ๋กœ ๊ฐ„๋‹จํžˆ ๋ฉ”๋ชจ


<a> ํƒœ๊ทธ์˜ ๊ฐ’ ์ œํ•œ

  • a ํƒœ๊ทธ href์— javascript:๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ => ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๋ง‰๊ณ , onClick๊ฐ’์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋งŒ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋จ

    function App() {
      function handleClick() {
        console.log("hello");
      }
    
      return (
        <>
          {/* a์˜ href๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ํŽ˜์ด์ง€ ์ด๋™์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ , onClick ํ•ธ๋“ค๋Ÿฌ๋งŒ ์‹คํ–‰ */}
          {/* ๋งˆํฌ์—… ์•ˆํ‹ฐํŒจํ„ด, button์„ ์‚ฌ์šฉํ•˜์ž */}
          <a href="javascript:;" onClick={handlerClick}>
            ๋งํฌ
          </a>
        </>
      );
    }
    
  • javascript:์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž…๋ ฅ ์‹œ

    <a href="javascript:alert('hello')">๋งํฌ</a> // dangerouslySetInnerHTML์„ ๊ถŒ์žฅํ•˜๋Š” ๊ฒฝ๊ณ ๋ฌธ๊ณผ ํ•จ๊ป˜ ์ •์ƒ์ ์œผ๋กœ ๋žœ๋”๋ง๋จ
    
  • a ํƒœ๊ทธ์˜ ๊ฐ’์ด ๋ฐฉ์ง€๋˜์–ด ์žˆ์ง€ ์•Š์€ ์‚ฌ์ดํŠธ์— <a href="javascript:alert(origin)">๋งํฌC</a>๊ฐ™์€ DOM ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

    • inblog.ai, ๋ผ์ด๋ธŒ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋จ image
  • ๊ตฌ๊ธ€์— ์ถ”๊ฐ€ํ•ด๋ณธ ๊ฒฐ๊ณผ: ๋ง‰ํ˜€์žˆ์Œ image

function isSafeHref(href: string) {
  let isSafe = false;
  try {
    const url = new URL(href)
    if(['http:', 'https:'].includes(url.protocol){
      isSafe = true
    })
  } catch (e) {
    ...
  }

  return isSafe
}

function App(){
  const unsafeHref ="javascript:alert('hello๐Ÿ‘‹')"
  const safeHref = "https://www.naver.com"
  return (
    <>
      {/* ์œ„ํ—˜ํ•œ href๋กœ ๋ถ„๋ฅ˜๋˜์–ด #์ด ๋ฐ˜ํ™˜*/}
      <a href={isSafeHref()?}></a>
    </>
  )
}
<a >
  • href๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์ œํ•œํ•ด์•ผ ํ•œ๋‹ค
    • โ“ ์–ด๋–ป๊ฒŒ? (๊ตฌ๊ธ€์€ ์–ด๋–ป๊ฒŒ ํ–ˆ๋‚˜)
      • a ํƒœ๊ทธ๋ฅผ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋‚˜?
        • ๊ฐœ๋ฐœ ์ค‘์— ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ aํƒœ๊ทธ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์žˆ์„ ๊ฒƒ
        • ์‚ฌ์šฉ์ž๊ฐ€ DOM ์š”์†Œ๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ง‰์ง€ ๋ชปํ•จ

HTTP ๋ณด์•ˆ ํ—ค๋” ์„ค์ •ํ•˜๊ธฐ

  • HTTP ๋ณด์•ˆ ํ—ค๋”๋ž€?
    • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋žœ๋”๋งํ•˜๋Š” ๋‚ด์šฉ๊ณผ ๊ด€๋ จ๋œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ํ—ค๋”
    • ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ๊ธฐ์ดˆ

Strict-Transport-Security

  • ๋ชจ๋“  ์‚ฌ์ดํŠธ๊ฐ€ HTTPS๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.
    • HTTP๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ, ๋ชจ๋“  ์‹œ๋„๋Š” HTTPS๋กœ ๋ณ€๊ฒฝ๋˜๊ฒŒ ํ•จ
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
  • max-age=<expire-time>: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„ค์ •์„ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„, ์ดˆ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์†Œ 1๋…„ (31536000), https://hstspreload.org์— ๋”ฐ๋ฅด๋ฉด 2๋…„ ๊ถŒ์žฅ
  • includeSubDomains: ๊ทœ์น™์„ ํ•˜์œ„ ๋„๋ฉ”์ธ์— ์ ์šฉ

X-XSS-Protection

  • ๋น„ํ‘œ์ค€ ๊ธฐ์ˆ  / ์‚ฌํŒŒ๋ฆฌ์™€ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ | ๊ฐ’ | ๋‚ด์šฉ | | --- | --- | | X-XSS-Protection: 0 | XSS ํ•„ํ„ฐ๋ง์„ ๋ˆ๋‹ค | | X-XSS-Protection: 1 | ๊ธฐ๋ณธ๊ฐ’, XSS ํ•„ํ„ฐ๋ง์„ ์ผœ๊ฒŒ ๋œ๋‹ค. ํŽ˜์ด์ง€ ๋‚ด๋ถ€์—์„œ ๊ณต๊ฒฉ ๊ฐ์ง€ ์‹œ, XSS ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ์•ˆ์ „ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค | | X-XSS-Protection: 1; mode=block | ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ ‘๊ทผ ์ž์ฒด๋ฅผ ๋ง‰์•„๋ฒ„๋ฆฐ๋‹ค | | X-XSS-Protection: 1; report= | ํฌ๋กœ๋ฏธ์›€ ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €, ๋ณด๊ณ ์„œ๋ฅผ uri๋กœ ์ „์†ก |

  • ํฌ๋กœ๋ฏธ์›€ ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €

    • ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์›น ๋ธŒ๋ผ์šฐ์ €
    • chrome(์›์กฐ ๋ง›์ง‘), edge, brave, arc, ์›จ์ผ, ์‚ผ์„ฑ ์ธํ„ฐ๋„ท ๋“ฑ
      • Chromium ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €๋“ค์€ ํฌ๋กฌ ์›น์Šคํ† ์–ด์— ์žˆ๋Š” ํ™•์žฅ๊ธฐ๋Šฅ ์ค‘ ๋ช‡ ๊ฐ€์ง€๋ฅผ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋‚ด์žฅ ๊ธฐ๋Šฅ์œผ๋กœ ํฌํ•จ์‹œํ‚จ ์ œํ’ˆ๋“ค์ด๋‹ค

X-Frame-Options

  • frame, iframe, embed, object ๋‚ด๋ถ€์—์„œ ๋žœ๋”๋ง์„ ํ—ˆ์šฉํ•  ๊ฒƒ์ด๋ƒ
    • ์™ธ๋ถ€์—์„œ ์ž์‹ ์˜ ํŽ˜์ด์ง€๋ฅผ iframe์œผ๋กœ ์‚ฝ์ž…ํ•ด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์Œ
  • X-Frame-Options: deny, X-Frame-Options: SAMEORIGIN

Permissions-Policy

  • ์›น์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” / ์—†๋Š” ๊ธฐ๋Šฅ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ

    • ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ: ์นด๋ฉ”๋ผ, GPS
  • XSS ๊ณต๊ฒฉ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•œ ํ—ค๋”

    Permissions-Policy: geolocation=() // ๋ชจ๋“  geolocation ์‚ฌ์šฉ ๋ง‰๊ธฐ
    Permissions-Policy: geolocation=(self "https://a.mysite.com" "https://b.mysite.com") // ์ž์‹ ๊ณผ ๋ช‡ ๊ฐ€์ง€ ํŽ˜์ด์ง€ ํ—ˆ์šฉ
    Permissions-Policy: camera=*;
    
    
    Permissions-Policy: pricture-in-picture=(), geolocation=(self "https://a.mysite.com" "https://b.mysite.com"), camera=*;
    

X-Content-Type-Options

  • Content-Type:: text/html, text/css => MIME

  • ์›น์„œ๋ฒ„๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๊ฐ•์ œ๋กœ ์ด ํŒŒ์ผ์„ ์ฝ๋Š” ๋ฐฉ์‹์„ ์ง€์ •ํ•˜๋Š” ํ—ค๋”

    X-Content-Type-Options: nosniff
    

Referrer-Policy

  • ์˜คํƒ€๋Š”? RFC ์ฒซ๋ฒˆ์งธ ๋ฒ„์ „์—์„œ ์ƒ๊ธด ์˜คํƒ€์ž„, (r 2๊ฐœ๊ฐ€ ์ง„์งœ)

    • rfc1945 - rfc? Request For Comments, 1969์— ARPANet์„ ๊ณต๋ถ€ํ•˜๋˜ ๋ฏธ๊ตญ์˜ ๋Œ€ํ•™์›์ƒ๋“ค์ด ๊ธฐ๋กํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋ฌธ์„œ - Request for Comments: 1 - 04/26/2024 ํ˜„์žฌ, 9565๊ฐœ ๋ฌธ์„œ

      The correct spelling is referrer. In the RFC's first version of the Hypertext Transfer Protocol (rfc1945), however, the wrong spelling, 'referer', crept in and was never corrected. Thus, in the official version, the spelling 'referer' is found. For this reason, the 'referer' spelling is still used by browsers today.

  • origin: scheme, hostname, port์˜ ์กฐํ•ฉ

    • scheme: HTTPS ํ”„๋กœํ† ์ฝœ
    • hostname: ํ˜ธ์ŠคํŠธ๋ช…
    • port: 443 ํฌํŠธ

mysite.com ๋„๋ฉ”์ธ๊ณผ ์ถœ์ฒ˜ ๋น„๊ต

| ์ถœ์ฒ˜ | ๋น„๊ต ๊ฒฐ๊ณผ | ์ฐจ์ด์  | | --------------------------- | ------------ | --------------------------------- | | https://fake.kr:443 | cross-origin | ๋„๋ฉ”์ธ | | https://www.mysite.com:443 | cross-origin | ์„œ๋ธŒ ๋„๋ฉ”์ธ | | https://blog.mysite.com:443 | cross-origin | ์„œ๋ธŒ ๋„๋ฉ”์ธ | | http://mysite.com:443 | cross-origin | scheme | | https://mysite.com:80 | cross-origin | port | | https://mysite.com:443 | same-origin | - | | https://mysite.com | same-origin | -, HTTPS ๊ธฐ๋ณธ ํฌํŠธ์ธ 443์œผ๋กœ ๊ฐ„์ฃผ |

  • Referrer-Policy ๊ฐ’
    • Referrer Policy

      strict-origin-when-cross-origin (default): 2020๋…„ ์ดํ›„, ํฌ๋กฌ, ํŒŒํญ, ์‚ฌํŒŒ๋ฆฌ์—์„œ ๊ธฐ๋ณธ๊ฐ’ Send the origin, path, and querystring when performing a same-origin request. For cross-origin requests send the origin (only) when the protocol security level stays same (HTTPSโ†’HTTPS). Don't send the Referer header to less secure destinations (HTTPSโ†’HTTP).

  • ์‘๋‹ต ํ—ค๋” ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ meta ํƒœ๊ทธ๋กœ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ
<meta name="referrer" content="origin" />
  • ํŽ˜์ด์ง€ ์ด๋™์‹œ๋‚˜ ์ด๋ฏธ์ง€ ์š”์ฒญ, link ํƒœ๊ทธ ๋“ฑ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ
<a href="http://mysite.com" referrerpolicy="origin">
  ...
</a>

Send only the origin in the Referer header. For example, a document at https://example.com/page.html will send the referrer https://example.com/.

  • ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ ๊ถŒ๊ณ  => ๋งŒ์•ฝ Referrer-Policy ๊ฐ’์ด ์—†๋‹ค๋ฉด?
    • ๋ธŒ๋ผ์šฐ์ € ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ž‘๋™ => ํ™˜๊ฒฝ๋ณ„ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ
    • ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €๋Š”? referer ์ •๋ณด๊ฐ€ ์œ ์ถœ๋  ์ˆ˜ ๋„ ์žˆ๋‹ค.

CSP, Content-Security-Policy

  • CSP๋Š” XSS ๊ณต๊ฒฉ์ด๋‚˜, SQL Injection(๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๊ณต๊ฒฉ)๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ์œ„ํ˜‘์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์„ค๊ณ„

-src

  • src ์ œ์–ด
Content-Security-Policy: font-src <source>
Content-Security-Policy: font-src <source> <source>
Content-Security-Policy: font-src http://fonts.google.com/
  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์‹œ๋ฌธ ๋งŽ์Œ, www.w3.org/TR/CSP2/#directives
    • connect-src: ์Šคํฌ๋ฆฝํŠธ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” URL ์ œํ•œ >> ์ด๊ฑธ๋กœ URL ์ œํ•œ
  • default-src๋กœ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    • *-src์˜ ํด๋ฐฑ ์—ญํ• 
  • form-action
    • ํผ์œผ๋กœ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋Š” URL์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ๋ง‰์Œ
<meta http-equiv="Content-Sercurity-Policy" content="form-action 'none'">

๋ณด์•ˆ ํ—ค๋” ์„ค์ •ํ•˜๊ธฐ

Next.js

  • ๊ฒฝ๋กœ๋ณ„๋กœ ๋ณด์•ˆ ํ—ค๋”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • next.config.js
const securityHeaders = [
  {
    key: "Content-Sercurity-Policy",
    value: ContentSercurityPolices.map((item) => `${item.key} ${item.value};`),join(' '),
  },
];

NGINX

  • ๊ฒฝ๋กœ๋ณ„๋กœ add_header ์ง€์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•ด, ์‘๋‹ต ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

๋ณด์•ˆ ํ—ค๋” ํ™•์ธํ•˜๊ธฐ

  • https://securityheaders.com/

OWASP Top 10

  • Open Worldwide (Web) Application Sercurity Project
    • ์˜คํ”ˆ์†Œ์Šค ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ”„๋กœ์ ํŠธ
  • ์›น์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ๋…ธ์ถœ, ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ, ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์—ฐ๊ตฌ / ์ฃผ๊ธฐ์ ์œผ๋กœ 10๋Œ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ทจ์•ฝ์ ์„ ๊ณต๊ฐœ

2021 - OWASP Top 10

  1. Broken Access Control (โ–ฒ4, Top 10์—์„œ ์ด์ „ ๋Œ€๋น„ 4๋‹จ๊ณ„ ์ƒ์Šน)
  • todo: ์ ‘๊ทผ ์ œ์–ด ์ •์ฑ…(MAC, DAC, RBAC)๊ณผ ์ธ๊ฐ€ Authorization์— ๋งž๋Š” ์•ก์„ธ์Šค ์ปจํŠธ๋กค
  1. Cryptographic Failure (โ–ฒ1)
  • todo: HSTS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์•”ํ˜ธ๋ฌธ์ด ๊ณ ์ •๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ , ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ ์‚ฌ์šฉ
    • HSTS๋Š”? HTTP Strict Transport Security, HTTP๋ฅผ HTTPS๋กœ ๊ฐ•์ œ๋กœ ๋ฆฌ๋””๋ ‰์…˜
  1. Injection
  • XSS, SQL, ORM // ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•œ ๊ณต๊ฒฉ
  1. Insecure Design
  • ๊ธฐํš ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์ 
  1. Security Misconfiguration (โ–ฒ1)
  • ๋ณด์•ˆ ์„ค์ • ์˜ค๋ฅ˜, ๋งˆ์Šคํ„ฐ ๊ณ„์ •์˜ ๋น„๋ฒˆ ์žฌ์„ค์ • ์•ˆํ•˜๋Š” ๋“ฑ
  1. Vulnerable and Outdated Components (โ–ฒ3)
  • ์ทจ์•ฝ์  or ์ง€์› ์ข…๋ฃŒ๋œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒ
    • npm ํŒจํ‚ค์ง€, OS, NGINX, ์•„ํŒŒ์น˜, ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ
  • ๋ถˆํ•„์š” ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์‚ฌ์ „์— ์ œ๊ฑฐ, ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ ๊ฒ€ํ•˜์—ฌ ์ฃผ๊ธฐ์  ํŒจ์น˜ ์—…๋ฐ์ดํŠธ
  1. Identification and Authentication Failures
  • (์ด์ „)Broke Authentication + Identification Failures
  • ์ธ์ฆ ๊ด€๋ จ ๋ณด์•ˆ ์ทจ์•ฝ์ : ์‚ฌ์šฉ์ž์˜ ์‹ ์› ํ™•์ธ์— ์‹คํŒจ, ์•”ํ˜ธ ์ƒ์„ฑ ์ •์ฑ…์ด ์—†๋Š” ๊ฒฝ์šฐ, ๋ฌด์ž‘์œ„ ๋Œ€์ž…, ์ธ์ฆ ๋ฐ ์„ธ์…˜๊ด€๋ฆฌ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์œ ์ถœ
  1. Software and Data Integrity Failures
  • ์†Œํ”„ํŠธ์›จ์–ด์™€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์˜ค๋ฅ˜
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค, ์ €์žฅ์†Œ, CDN, ํ”Œ๋Ÿฌ๊ทธ์ธ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กด
    • ์ž˜๋ชป๋œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉ
  1. Security Logging and Monitoring Failures
  • ์ ์ ˆํ•œ ๋กœ๊น…x, ๋กœ๊น… ์ •๋ณด ๋ถ€์กฑ => ์‚ฌ์ „์— ๊ณต๊ฒฉ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ทจ์•ฝ์ 
  • ์ ์ ˆํ•œ ํ˜•์‹๊ณผ ๋ณด๊ด€ ์ฃผ๊ธฐ๋กœ ๋กœ๊น…์„ ์ˆ˜ํ–‰
    • ์˜์‹ฌ์Šค๋Ÿฌ์šด ํ™œ๋™์„ ์‚ฌ์ „์— ๊ฐ์‹œ
    • ์‹ ์†ํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„
  1. Server-Side Request Forgery (new!)
  • ์„œ๋ฒ„์ธก ์š”์ฒญ ๋ณ€์กฐ, ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„ํ•œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์ด ๊ฐ€๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์œ„์กฐ๋œ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ทจ์•ฝ์ ์„ ์˜๋ฏธ
  • ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ์—์„œ ์„œ๋ฒ„์‚ฌ์ด๋“œ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋ณด์•ˆ ๋Œ€์ฑ…์„ ๋งˆ๋ จํ•ด์•ผ ํ•œ๋‹ค

์ •๋ฆฌ

  • ๋ฒ„๊ทธ๊ฐ€ ๋ณด์•ˆ ์ทจ์•ฝ์ ์œผ๋กœ ์ด์–ด์ง

์‚ฌ๋ก€A. log4js

  • 2021๋…„ 12์›”, Log4Shell
  • CVE, Common Vulnerability Exposure

    https://www.balbix.com/insights/what-is-a-cve/

  • ์งง๋ง‰ ์ƒ์‹
    • vulnerability: ์ธ๊ฐ€๋ฐ›์ง€ ์•Š์€ ์‚ฌ์šฉ์ž(๊ณต๊ฒฉ์ž)๊ฐ€ ์นจํˆฌํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํƒˆ์ทจ, ์‚ญ์ œ, ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
    • expose: ์‹ค์ˆ˜๋กœ ๋ฐ์ดํ„ฐ ์œ ์ถœ ํ˜น์€ ์ธ๊ฐ€๋ฐ›์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉ
  • log4j ๋ณด์•ˆ ์ด์Šˆ๋Š” 0-๋ฐ์ด ์ทจ์•ฝ์ (0 Day Vulnerability)์— ํ•ด๋‹น
    • ํ•ด์ปค๊ฐ€ ๊ฐœ๋ฐœ์ž๋ณด๋‹ค ๋จผ์ € ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌ (์–ธ์ œ ๋‹นํ–ˆ๋Š” ์ง€ ๋ชจ๋ฆ„)
  • ๊ณต๊ฒฉ์ž ์„œ๋ฒ„์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›๊ฒŒ ํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ => RCE(Remote Code Execution) image

์‚ฌ๋ก€B. ํ•˜ํŠธ๋ธ”๋ฆฌ๋“œ

  • 2014๋…„, OpenSSL
  • Buffer Overflow, ๊ฐ€๋ณ€ ๊ธธ์ด ์ฒดํฌ image

์‚ฌ๋ก€C. ImageMagick

  • 2023๋…„ 2์›” 6์ผ
    • Denial of Service, ์„œ๋น„์Šค ๊ฑฐ๋ถ€์— ์ทจ์•ฝ
      • https://nvd.nist.gov/vuln/detail/CVE-2022-44267
      • PNG ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๋•Œ(์˜ˆ: ํฌ๊ธฐ ์กฐ์ •์„ ์œ„ํ•ด) ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค๋Š” stdin ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋‚จ๊ฒจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    • Information Disclosure, ์ •๋ณด ๊ณต๊ฐœ์— ์ทจ์•ฝ
      • https://nvd.nist.gov/vuln/detail/CVE-2022-44268
      • PNG ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๋•Œ(์˜ˆ: ํฌ๊ธฐ ์กฐ์ •์„ ์œ„ํ•ด) ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์— ์ž„์˜์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ(magick ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ)

๋ณด์•ˆ ๋‰ด์Šค ์‚ฌ์ดํŠธ

  • https://m.boannews.com/html/news.html?mtype=1&tab_type=1