๐ŸŽ Apple/iOS

[iOS] ATS(App Transport Security), ATS์„ค์ • ๋ฐฉ๋ฒ•

JINiOS 2023. 12. 28. 16:10
728x90

 iOS์—์„œ API ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด http ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋  ๋•Œ๋„ ์žˆ์„ํ…๋ฐ, ์ด์ „๊นŒ์ง€๋Š” App Transport Security policy ๊ด€๋ จํ•œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด, Info.plist - App Transport Security Setting์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑํ•ด์„œ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐฐํฌํ•  ๋•Œ ๋ฆฌ์  ๋‹นํ•œ๋‹ค๋Š” ๋ง์„ ๋“ฃ๊ฒŒ ๋˜์—ˆ๋‹ค..! ์•„๋ฌด๋ ‡์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•ด์™”๋Š”๋ฐ, ๋ฐฐํฌํ•  ๋•Œ๋Š” ์„ค์ •์„ ์ž˜ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค!

 


 

1. ATS์— ๊ด€๋ จํ•˜์—ฌ

Apple ํ”Œ๋žซํผ์—์„œ ์•ฑ ์ „์†ก ๋ณด์•ˆ(ATS)์ด๋ผ๋Š” ๋„คํŠธ์›Œํ‚น ๋ณด์•ˆ ๊ธฐ๋Šฅ์€ ๋ชจ๋“  ์•ฑ๊ณผ ์•ฑ ํ™•์žฅ์˜ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ๋งŒ๋“  ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ์™€ ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ(TLS) ํ”„๋กœํ† ์ฝœ์— ์˜ํ•ด ๋ณดํ˜ธ๋˜๋„๋ก ์š”๊ตฌํ•จ์œผ๋กœ์จ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ATS๋Š” ์ตœ์†Œ ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š” ์—ฐ๊ฒฐ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

ATS๋Š” iOS 9.0 ๋˜๋Š” macOS 10.11 SDK ์ด์ƒ๊ณผ ์—ฐ๊ฒฐ๋œ ์•ฑ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์™„์ „ํžˆ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๊ณ  ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ

( = http ์„œ๋ฒ„, TLS 1.1 ๋ฏธ๋งŒ์˜ https ์„œ๋ฒ„)

์ผ๋ถ€ ATS ์š”๊ตฌ ์‚ฌํ•ญ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์™ธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ฌ์‚ฌ ์‹œ์— ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ •๋‹นํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

2. ATS ์˜ˆ์™ธ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

HTTP์ธ ๊ฒฝ์šฐ

  • ๋ชจ๋“  HTTP ํ†ต์‹  ํ—ˆ์šฉ: NSAllowsArbitraryLoads - YES ์„ค์ •
    ์•”ํ˜ธํ™” ํ•˜์ง€ ์•Š์€ ํ†ต์‹ ์ด๋ฏ€๋กœ ๋ถˆ๊ฐ€ํ”ผํ•œ ๋•Œ ์™ธ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ ๋ฐฐํฌํ•˜์ง€ ์•Š์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜์ž.

 

 

  • ATS์—์„œ ์ œ์™ธํ•  ํŠน์ • ๋„๋ฉ”์ธ ์ง€์ •: Exception Domains - ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ๋„๋ฉ”์ธ ์ถ”๊ฐ€
    a. ํ•˜๋‹จ์˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋„๋ฉ”์ธ์„ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ˆ˜์ •ํ•˜๊ณ , NSTemporaryExceptionAllowsInsecureHTTPLoads์˜ ๊ฐ’์„ YES๋กœ ์„ค์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    b. ๋งŒ์•ฝ sub domain๊นŒ์ง€ ์˜ˆ์™ธ์— ํฌํ•จํ•˜๋ ค๋ฉด "www"๋ฅผ ์ง€์šฐ๊ณ  ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ํ•˜๋‹จ์˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ NSIncludesSubdomains๋ฅผ YES๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

a. ํŠน์ • ๋„๋ฉ”์ธ ์˜ˆ์™ธ ์„ค์ •

 

b. subdomain๊นŒ์ง€ ์˜ˆ์™ธ ์„ค์ •

 

Info.plist์šฉ ํ‚ค๋ฅผ ์ž์„ธํžˆ ๋ณด๋ ค๋ฉด ๋”๋ณด๊ธฐ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

info.plist์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ํ‚ค์™€ ์ž์„ธํ•œ ์„ค๋ช…์€ ์‚ฌ์ดํŠธ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค > "์—ฌ๊ธฐ"

  • NSAppTransportSecurity (Dictionary)
    • NSAllowsArbitraryLoads (Bool)
    • NSAllowsArbitraryLoadsForMedia(Bool)
    • NSAllowsArbitraryLoadsInWebContent(Bool)
    • NSAllowsLocalNetworking(Bool)
    • NSExceptionDomains (Dictionary)
      • <domain-name-for-exception-as-string> (Dictionary)
        • NSExceptionMinimumTLSVersion (String)
        • NSExceptionRequiresForwardSecrecy (Bool)
        • NSExceptionAllowsInsecureHTTPLoads (Bool)
        • NSRequiresCertificateTransparency (Bool)
        • NSIncludesSubdomains (Bool)
        • NSThirdPartyExceptionMinimumTLSVersion (String)
        • NSThirdPartyExceptionRequiresForwardSecrecy (Bool)
        • NSThirdPartyExceptionAllowsInsecureHTTPLoads (Bool)

 

HTTPS์ธ ๊ฒฝ์šฐ(TLS ๋ฒ„์ „์ด ๋‚ฎ์€ ๊ฒฝ์šฐ)

ํ„ฐ๋ฏธ๋„์— ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. Domain์— ๋„๋ฉ”์ธ URL์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

nscurl -- ats diagnostics Domain --verbose

nscurl -- ats diagnostics https://www.tistory.com --verbose  (์˜ˆ์‹œ)

 

๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  "RESULT: Fail"์ธ ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•ด ํ•„์š”ํ•œ ์˜ต์…˜์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค๋Š”๋ฐ,

์ด๋Š” ์•„์ง ํ•ด๋ณด์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ,, ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๊ฒ ๋‹ค..!

 

3. ์•ฑ์Šคํ† ์–ด ๋ฐฐํฌ ์‹œ ์ •๋‹นํ™”๊ฐ€ ํ•„์š”ํ•œ ์˜ˆ์™ธ์™€ ์ •๋‹น์„ฑ์˜ ์˜ˆ์‹œ

์•ฑ Information Property ListํŒŒ์ผ์— ํŠน์ • ATS ์˜ˆ์™ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ •๋‹น์„ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ ์•ฑ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ App Store ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ ์‹ฌ์‚ฌ๋ฅผ ์ œ์ถœํ•  ๋•Œ ์•ฑ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก App Store์— ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ •๋‹นํ™”๊ฐ€ ํ•„์š”ํ•œ ์˜ˆ์™ธ

๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋‹น์„ฑ์˜ ์˜ˆ์‹œ

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

 


 

 

์ถœ์ฒ˜

https://developer.apple.com/documentation/security/preventing_insecure_network_connections

https://nopdin.tistory.com/1818

https://leibniz55.tistory.com/entry/ATS-%EC%98%B5%EC%85%98-%EC%84%A4%EC%A0%95%EB%B2%95

 

์‚ฌ์‹ค๊ณผ ๋‹ค๋ฅธ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” ๐Ÿ™‡๐Ÿป‍โ™€๏ธ

728x90