πŸš€ iOS λ„€νŠΈμ›Œν‚Ή μ •λ³΅ν•˜κΈ° : ATS (App Transport Security)

a.veryΒ·2022λ…„ 9μ›” 29일
0

App Transport Security

πŸ“” κ΄€λ ¨ κ³΅μ‹λ¬Έμ„œ

ATSλž€?

ATSλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ›Ή μ„œλΉ„μŠ€ 사이에 톡신 μ‹œ λ³΄μ•ˆ ν–₯상을 μœ„ν•œ κΈ°λŠ₯으둜

  • iOS 9.0, macOS 10.11 μ΄μƒμ˜ μ•±μ—μ„œ λͺ¨λ“  인터넷 톡신 μ‹œ μ•ˆμ „ν•œ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λ„λ‘ 보μž₯ν•˜λŠ” κ²ƒμœΌλ‘œ μ‚¬μš©μžμ˜ λ―Όκ°ν•œ 정보가 μœ μΆœλ˜λŠ” 것을 λ°©μ§€ν•œλ‹€
  • ATS κ°€ 적용되면, 기쑴에 iOS μ•±μ—μ„œ μ‚¬μš©ν•˜λ˜ μ•”ν˜Έν™”λ˜μ§€ μ•Šμ€ HTTP 톡신은 OS λ‚΄λΆ€μ—μ„œ κ°•μ œμ μœΌλ‘œ μ°¨λ‹¨λ˜κ²Œ λœλ‹€.
  • μ™„μ „νžˆ λ³΄μ•ˆλ˜μ§€ μ•Šμ€ μ„œλ²„μ— μ—°κ²°ν•΄μ•Ό ν•˜κ³ , λ³΄μ•ˆμ„ κ°•ν™”ν•˜κΈ° μœ„ν•΄ μž¬κ΅¬μ„±ν•  수 μ—†λŠ” 경우 μ˜ˆμ™Έλ₯Ό μΆ”κ°€ν•˜μ—¬ ATS μš”κ΅¬ 사항 쀑 일뢀λ₯Ό μ™„ν™”ν•  수 μžˆλ‹€

ATS λ“±μž₯ λ°°κ²½

λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 개인의 μ—¬λŸ¬ 가지 정보(μ—°λ½μ²˜, 사진, 건강정보, λ©”μ‹œμ§€, 메일 λ“±)λ₯Ό λ‹€λ£¨κ²Œ λ˜λ©΄μ„œ μ‚¬μš©μž μ •λ³΄λ³΄ν˜Έμ— λŒ€ν•œ μ€‘μš”μ„±μ΄ ν•œμΈ΅ λΆ€κ°λ˜μ—ˆλ‹€. 그런데 기쑴의 λ³΄μ•ˆ/μ•”ν˜Έ κΈ°μˆ μ€ μ˜€λž˜λ˜μ–΄ 곡격에 μ·¨μ•½ν•΄μ‘Œμ§€λ§Œ, 컴퓨터 μ„±λŠ₯은 점점 λ°œμ „ν•˜λ©΄μ„œ μƒˆλ‘­κ²Œ λ“±μž₯ν•˜λŠ” λ„€νŠΈμ›Œν¬ 곡격이 κ°•λ ₯ν•΄μ§€μž 이에 λŒ€μ‘ν•˜κΈ° μœ„ν•΄ 2015λ…„ ATSλ₯Ό λ„μž…ν•˜κ²Œ λ˜μ—ˆλ‹€.

2016λ…„λΆ€ν„° μƒˆλ‘­κ²Œ λ§Œλ“€μ–΄μ§€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ°˜λ“œμ‹œ ATSλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ©°, 기쑴에 개발된 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ATSλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ λ„€νŠΈμ›Œν¬ λ³΄μ•ˆμ„ κ°•ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ATS λ™μž‘

  • URLSession, CFURL 그리고 NSURLConnection APIλ₯Ό μ΄μš©ν•΄ 데이터λ₯Ό 주고받을 λ•Œ ATS κΈ°λŠ₯을 기본적으둜 μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.
  • ν‘œμ€€ URL Loading System을 μ‚¬μš©ν•˜λ©΄ μ‹œμŠ€ν…œμ΄ μžλ™μœΌλ‘œ ATSλ₯Ό μ μš©λœλ‹€.
    • URL μ„Έμ…˜μ˜ μΈμŠ€ν„΄μŠ€λŠ” μ„œλ²„μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” κ°€μž₯ μ•ˆμ „ν•œ 연결을 μžλ™μœΌλ‘œ μ„ νƒν•˜κ²Œ λœλ‹€. μ•±μ—μ„œλŠ” https둜 μ‹œμž‘ν•˜λŠ” λ³΄μ•ˆ URL을 μ‚¬μš©ν•˜λ©°, 그렇지 μ•ŠμœΌλ©΄ ATSκ°€ 연결을 κ±°λΆ€ν•˜κ³  μ½˜μ†” λ©”μ‹œμ§€λ₯Ό ν”„λ¦°νŠΈ ν•˜κ²Œ λœλ‹€.
  • ATSκ°€ ν™œμ„±ν™”λ˜μ–΄μžˆμ„ λ•ŒλŠ” HTTP 톡신을 ν•  수 μ—†μœΌλ©° μ• ν”Œμ—μ„œ ꢌμž₯ν•˜λŠ” μ•„λž˜ μš”κ΅¬ 사항을 μΆ©μ‘±ν•˜μ§€ μ•Šμ€ λ„€νŠΈμ›Œν¬λŠ” 연결에 μ‹€νŒ¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • μ„œλ²„λŠ” TLS(Transport Layer Security) ν”„λ‘œν† μ½œ 버전 1.2 이상을 지원해야 ν•©λ‹ˆλ‹€.
    • 적어도 2048λΉ„νŠΈ μ΄μƒμ˜ RSA ν‚€ λ˜λŠ” 256λΉ„νŠΈ μ΄μƒμ˜ ECC(Elliptic-Curve) ν‚€κ°€ μžˆλŠ” SHA256을 μΈμ¦μ„œμ— μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • μ•”ν˜Έ 연결은 μ•„λž˜ ν—ˆμš©λœ μ•”ν˜Έ λͺ©λ‘μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.
    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

μš©μ–΄ 정리

  • 전솑 계측 λ³΄μ•ˆ (Transport Layer Security - TLS)
    - μ•”ν˜Έ ν”„λ‘œν† μ½œ : μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ„€νŠΈμ›Œν¬λ‘œ ν†΅μ‹ ν•˜λŠ” κ³Όμ •μ—μ„œ 도청, κ°„μ„­, μœ„μ‘°λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œ 정보λ₯Ό μ•”ν˜Έν™”ν•΄μ„œ μ†‘μˆ˜μ‹ ν•œλ‹€

  • HTTPS (Hypertext Transfer Protocol Secure)
    - TLSλ₯Ό μ‚¬μš©ν•΄ μ•”ν˜Έν™”λœ 연결을 ν•˜λŠ” HTTP(Hypertext Transfer Protocol)λ₯Ό HTTPS라고 ν•©λ‹ˆλ‹€.

TLSλŠ” λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ λ³΄μ•ˆ 톡신을 ν•˜λ €λŠ” ν”„λ‘œν† μ½œμ΄κ³ , HTTPSλŠ” TLS μœ„μ— HTTP ν”„λ‘œν† μ½œμ„ μ–Ήμ–΄ λ³΄μ•ˆλœ HTTP 톡신을 ν•˜λŠ” ν”„ν† λ‘œμ½œμž…λ‹ˆλ‹€.

μ˜ˆμ™Έμ‚¬ν•­

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ATSκ°€ μš”κ΅¬ν•˜λŠ” 사항을 μΆ©μ‘±ν•˜κΈ° νž˜λ“  경우, ATS κΈ°λŠ₯을 λΉ„ν™œμ„±ν™”ν•  수 μžˆλŠ”λ°, μ•„λž˜λŠ” ATS κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ μ•Šμ„ 수 μžˆλŠ” μ˜ˆμ™Έμ‚¬ν•­μ΄λ‹€.
    • AVFoundation ν”„λ ˆμž„μ›Œν¬λ₯Ό ν†΅ν•œ 슀트리밍 μ„œλΉ„μŠ€
    • WebKit을 ν†΅ν•œ μ½˜ν…μΈ  μš”μ²­
    • 둜컬 λ„€νŠΈμ›Œν¬ μ—°κ²°
    • κ·Έ μ™Έμ—λŠ” μ„œλ²„κ°€ μ΅œμ‹  TLS λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•  λ•ŒκΉŒμ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μœ μ§€ 보수λ₯Ό μœ„ν•΄ μΌμ‹œμ μœΌλ‘œ ATS κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 κ°€λŠ₯ν•˜λ©°, App Store 심사 μ‹œ μ •λ‹Ήν•œ 이유λ₯Ό μ„€λͺ…ν•˜λŠ” λ¬Έμ„œκ°€ ν•„μš”ν•  μˆ˜λ„ μžˆλ‹€.

HTTP 톡신을 ν•˜λ €λ©΄? ATSλ₯Ό λΉ„ν™œμ„±ν™” ν•΄μ•Όν•œλ‹€

ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ˜ info.plist νŒŒμΌμ—μ„œ μ„€μ •ν•  수 μžˆλ‹€

  • λͺ¨λ“  HTTP 톡신 ν—ˆμš© : μ•”ν˜Έν™” ν•˜μ§€ μ•Šμ€ ν†΅μ‹ μ΄λ―€λ‘œ λΆˆκ°€ν”Όν•œ λ•Œ μ™Έμ—λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.
  • μœ μ¦ˆμΌ€μ΄μŠ€μ— 따라 더 μ’μ€λ²”μœ„μ˜ μ˜ˆμ™Έλ₯Ό μ œκ³΅ν•  수 μžˆλ‹€
    • 예λ₯Ό λ“€μ–΄ NSAllowsArbitraryLoadsInWebContent 을 YES둜 μ„€μ •ν•˜λ©΄ WKWebView의 μΈμŠ€ν„΄μŠ€μ™€ 같이 μ›Ή λ·° λ‚΄μ—μ„œ μ΄λ£¨μ–΄μ§€λŠ” ν˜ΈμΆœμ— λŒ€ν•œ ATS μ œν•œμ„ λΉ„ν™œμ„±ν™”ν•  수 μžˆλ‹€.

  • ATSμ—μ„œ μ œμ™Έν•  νŠΉμ • 도메인 μ§€μ •ν•˜λŠ” 법은 μ•„λž˜μ™€ κ°™λ‹€

References

profile
🚚chanhee-jeong.tistory.com πŸš€ github.com/chaneeii/iOS-Study-Log

0개의 λŒ“κΈ€