πŸ” iOSμ—μ„œμ˜ λ³΄μ•ˆ (1)

CharlieΒ·2024λ…„ 3μ›” 14일
0
post-thumbnail

μ‹œκ°„μ΄ μ§€λ‚ μˆ˜λ‘ λ³΄μ•ˆμ˜ μ€‘μš”μ„±μ€ λ†’μ•„μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΅œκ·Όμ—λŠ” μ•”ν˜Έν™”ν μ‹œμž₯의 μ„±μž₯κ³Ό λ”λΆˆμ–΄ κ΄€λ ¨ν•œ λ³΄μ•ˆ μ΄μŠˆλ“€μ΄ λŒ€λ‘λ˜κΈ°λ„ ν•˜μ˜€κ³ , DDoS 곡격으둜 e-sport 경기에도 타격이 μžˆλŠ” λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ 곡격자의 ν˜•νƒœ 및 μ‹œλ„κ°€ λ§Žμ•„μ§€κ³  그에 따라 λ³΄μ•ˆμ„ ν•„μš”λ‘œ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

ν˜„λŒ€μ˜ λ””μ§€ν„Έ μ‹œλŒ€μ—μ„œλŠ” λͺ¨λ°”일 기기의 보급과 ν•¨κ»˜ 앱이 우리의 일상에 λ°€μ ‘ν•˜κ²Œ λ…Ήμ•„λ“€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν™˜κ²½μ—μ„œ λ„€νŠΈμ›Œν¬ λ³΄μ•ˆμ€ λ¬Όλ‘ , 앱을 톡해 μ²˜λ¦¬ν•˜λŠ” λͺ¨λ“  데이터듀을 λ³΄ν˜Έν•˜λŠ” 것이 핡심적인 κ³Όμ œκ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” ν† μŠ€μ˜ ν•΄ν‚Ή κ΄€λ ¨ μ˜μƒμ„ 보고 크게 감λͺ…λ°›μ•„ λ³΄μ•ˆμ— λŒ€ν•΄μ„œ μ–•κ²Œλ‚˜λ§ˆ 곡뢀λ₯Ό 함과 λ™μ‹œμ— iOS ν”„λ‘œμ νŠΈμ—μ„œ μ μš©ν•  수 μžˆλŠ” λ³΄μ•ˆ λ©”μ»€λ‹ˆμ¦˜μ΄ μ–΄λ– ν•œ 것듀이 μžˆλŠ”μ§€ 생각을 ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” iOS ν”„λ‘œμ νŠΈμ—μ„œ λ„€νŠΈμ›Œν¬λ₯Ό ν¬ν•¨ν•œ λ‹€μ–‘ν•œ λ°©λ©΄μ—μ„œμ˜ 곡격 ν˜•νƒœμ™€ 그에 λ§žλŠ” λ³΄μ•ˆ μ†”λ£¨μ…˜λ“€μ— λŒ€ν•΄μ„œ μž‘μ„±ν•˜λ €κ³  ν•©λ‹ˆλ‹€.





1. 기본적인 λ³΄μ•ˆ κΈ°λŠ₯ 및 μ •μ±…

1. Apple Transport Security

iOSμ—μ„œλŠ” λͺ¨λ“  λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ μ•”ν˜Έν™” ν•˜κΈ° μœ„ν•΄ HTTPSλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
HTTP(Hypertext Transfer Protocol)λŠ” 데이터가 ν‰λ¬ΈμœΌλ‘œ μ „μ†‘λ˜κΈ° λ•Œλ¬Έμ— λ„€νŠΈμ›Œν¬ 톡신 μ‹œ λ°μ΄ν„°μ˜ 도청 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ³„λ„μ˜ λ³΄μ•ˆ μΈμ¦μ„œκ°€ ν•„μš” μ—†μœΌλ©°, μΏ ν‚€ 데이터 λ˜ν•œ ν‰λ¬ΈμœΌλ‘œ μ „μ†‘λ©λ‹ˆλ‹€.

반면 HTTPS(Hypertext Transfer Protocol Secure)λŠ” λ³΄μ•ˆ μ†ŒμΌ“ 계측(SSL, TLS)을 μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ•”ν˜Έν™” ν•©λ‹ˆλ‹€. SSL λ˜λŠ” TLSλ₯Ό μ‚¬μš©ν•˜λ©° 무결성, κΈ°λ°€μ„± λ“±μ˜ 핡심이 λ˜λŠ” λ³΄μ•ˆ νŠΉμ„±μ„ 보μž₯받을 수 μžˆκΈ°λ„ ν•˜κ³ , man in the middle attack을 λ°©μ§€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

iOSμ—μ„œλŠ” 2015λ…„ iOS9 μ—…λ°μ΄νŠΈ λ•Œ λ„μž…λœ App Transport Securityλ₯Ό 톡해 HTTPSλ₯Ό κ°•μ œν•˜μ—¬ HTTPλ₯Ό ν¬ν•¨ν•œ λ³΄μ•ˆμ— μ·¨μ•½ν•œ λ„€νŠΈμ›Œν¬ 연결을 μ°¨λ‹¨μ‹œν‚΅λ‹ˆλ‹€.

λ§Œμ•½ iOSκΈ°κΈ°μ—μ„œ νŠΉμ • 도메인에 λŒ€ν•΄ ATSλ₯Ό μ˜ˆμ™Έμ μœΌλ‘œ κ΅¬μ„±ν•˜κ±°λ‚˜ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κ³  μ‹ΆμœΌλ©΄ Info.plist νŒŒμΌμ—μ„œ App Transport Security Settings μ„€μ •μ˜ Allow Arbitrary Loads 값을 true둜 μ„€μ •ν•˜λ©΄ λ©λ‹ˆλ‹€.

2. VPN, ν”„λ‘μ‹œ

iOSμ—μ„œλŠ” VPN(Virtual Private Network)을 톡해 μ•ˆμ „ν•œ 연결을 μ œκ³΅ν•˜λ©° μ™ΈλΆ€μ™€μ˜ 톡신을 λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€. VPN을 ν™œμš©ν•˜λ©΄ 데이터λ₯Ό μ•”ν˜Έν™”ν•˜μ—¬ μ€‘κ°„μž 곡격을 λ°©μ§€ν•˜κ³  기밀성을 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ‚¬μš©μžμ˜ μœ„μΉ˜ 정보λ₯Ό 숨길 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 쀑계 역할을 ν•˜λŠ” ν”„λ‘μ‹œ μ„œλ²„λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΈλž˜ν”½μ„ ν•„ν„°λ§ν•˜κ±°λ‚˜ λ³€μ‘°ν•˜κ³  κ²€μ‚¬ν•˜λŠ” λ“±μ˜ 좔가적인 λ³΄μ•ˆ 계측을 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘μ‹œ μ„œλ²„λŠ” 반볡적인 μš”μ²­μ— λŒ€ν•΄μ„œ 캐싱을 톡해 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³  νŠΈλž˜ν”½μ„ μ•”ν˜Έν™”ν•˜μ—¬ λ°μ΄ν„°μ˜ μ•ˆμ „μ„±μ„ κ°•ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

iOSμ—μ„œλŠ” VPNκ³Ό ν”„λ‘μ‹œ μ„œλ²„λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ VPN은 λ°μ΄ν„°μ˜ μ•”ν˜Έν™”λ₯Ό λ‹΄λ‹Ήν•˜κ³ , ν”„λ‘μ‹œλ₯Ό 톡해 νŠΈλž˜ν”½μ„ μ€‘κ°œν•˜μ—¬ 필터링 및 검사λ₯Ό μˆ˜ν–‰ν•˜λ„λ‘ ν•˜μ—¬ λ„€νŠΈμ›Œν¬μ˜ μ•ˆμ „μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
VPNκ³Ό ν”„λ‘μ‹œλ₯Ό iOS μ•±μ—μ„œ 적절히 κ΅¬μ„±ν•˜λ©΄ λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ 톡신을 μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•˜κ³  기밀성을 μœ μ§€ν•  수 있게 λ©λ‹ˆλ‹€.

3. OAuth, OpenID Connect

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ ν†΅μ‹ μ—μ„œ 인증은 ν•„μˆ˜μ μž…λ‹ˆλ‹€. 인증은 μ‚¬μš©μž λ˜λŠ” μ„œλΉ„μŠ€κ°€ μžμ‹ μ΄ μ£Όμž₯ν•˜λŠ” 신원을 ν™•μΈν•˜λŠ” κ³Όμ •μœΌλ‘œ, OAuth 및 OpenID Connect와 같은 ν”„λ‘œν† μ½œμ„ 톡해 μ‚¬μš©μžλ₯Ό μ•ˆμ „ν•˜κ²Œ μ‹λ³„ν•˜κ³  κΆŒν•œμ„ λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
iOSμ—μ„œλŠ” ν•΄λ‹Ή ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ œκ³΅λ©λ‹ˆλ‹€.

OAuth(Open Authorization)은 third-party ν”„λ‘œκ·Έλž¨μ΄ νŠΉμ • μ‚¬μš©μžμ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ κΆŒν•œμ„ λΆ€μ—¬ν•˜κΈ° μœ„ν•œ ν‘œμ€€μž…λ‹ˆλ‹€. μ‚¬μš©μžλŠ” ν΄λΌμ΄μ–ΈνŠΈ 앱에 μ˜ν•΄ 신원을 ν™•μΈν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‚¬μš©μžμ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ 인증 μ„œλ²„λ‘œλΆ€ν„° κΆŒν•œμ„ λΆ€μ—¬ λ°›μŠ΅λ‹ˆλ‹€.

OpenID ConnectλŠ” OAuth 2.0을 기반으둜 ν•˜λ©°, μ‚¬μš©μžμ˜ 식별 정보λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•œ ν‘œμ€€μž…λ‹ˆλ‹€. OpenID ConnectλŠ” OAuth 2.0 인증 ν”„λ‘œν† μ½œ 상에 ID 토큰을 μ œκ³΅ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‚¬μš©μžμ˜ 식별 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ‚¬μš©μž 식별을 μœ„ν•œ 더 μ•ˆμ „ν•˜κ³  ν‘œμ€€ν™”λœ 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.

iOSμ—μ„œλŠ” λŒ€ν‘œμ μœΌλ‘œ AppAuth와 같은 OAuth 및 OpenID Connectλ₯Ό μ§€μ›ν•˜λŠ” 라이브러리λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ LocalAuthentication을 ν™œμš©ν•˜μ—¬ Apple ID, Touch ID 및 Facd IDλ₯Ό ν™œμš©ν•œ 생체 인식 인증 κΈ°λŠ₯을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. λ³΄μ•ˆ ν”„λ‘œν† μ½œ

iOSλŠ” TLS(Transport Layer Security)λ₯Ό μ§€μ›ν•˜μ—¬ λ„€νŠΈμ›Œν¬ ν†΅μ‹ μ—μ„œμ˜ λ°μ΄ν„°μ˜ κΈ°λ°€μ„±κ³Ό 무결성을 보μž₯ν•˜κ³  μ€‘κ°„μž 곡격을 λ°©μ§€ν•©λ‹ˆλ‹€. iOS 9λΆ€ν„° TLS 1.2κ°€ μ§€μ›λ˜μ—ˆκ³ , iOS 13λΆ€ν„° TLS 1.3이 μΆ”κ°€λ‘œ μ§€μš°λ„ˆλ˜μ–΄ λ”μš± κ°•λ ₯ν•œ μ•”ν˜Έν™”μ™€ μ„±λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

λ˜ν•œ iOSμ—μ„œλŠ” PFS(Perfect Forward Secrecy)λ₯Ό 톡해 μ„Έμ…˜ ν‚€κ°€ μœ μΆœλ˜μ—ˆμ–΄λ„ 이전 ν†΅μ‹ μ˜ 비밀성을 μœ μ§€ν•˜κ³  μ€‘κ°„μž κ³΅κ²©μœΌλ‘œλΆ€ν„° κ³Όκ±° ν†΅μ‹ μ˜ 비밀성을 μœ μ§€ν•©λ‹ˆλ‹€.

μ•±μ—μ„œ TLSλ₯Ό κ΅¬μ„±ν•˜κ³  λ³΄μ•ˆμ„ κ°•ν™”ν•˜κΈ° μœ„ν•΄μ„œλŠ” Info.plist파일의 App Transport Securityλ₯Ό μ„€μ •ν•˜κ±°λ‚˜, URLSession, Alamofire, Moya λ“± μ—¬λŸ¬ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ§€μ›ν•˜λŠ” TLS 섀정을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. SSL Pinning κ΅¬ν˜„

SSL Pinning은 μ•±μ—μ„œ μ„œλ²„λ‘œμ˜ μ•ˆμ „ν•œ 톡신을 κ°•ν™”ν•˜κΈ° μœ„ν•œ λ©”μ»€λ‹ˆμ¦˜ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 이λ₯Ό ν† μ•» μ€‘κ°„μž 곡격과 같은 μœ„ν˜‘μ„ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. SSL Pinning은 앱이 ν†΅μ‹ ν•˜λŠ” μ„œλ²„μ˜ 곡개 ν‚€λ‚˜ μΈμ¦μ„œλ₯Ό ν•˜λ“œμ½”λ”©ν•˜μ—¬ μ„œλ²„μ˜ 신원을 ν™•μ‹€ν•˜κ²Œ κ²€μ¦ν•˜μ—¬ μ€‘κ°„μž κ³΅κ²©μœΌλ‘œλΆ€ν„° λ°©μ§€ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

주둜 μ„œλ²„μ˜ SSL, TLS 연결을 μ„€μ •ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μ„œλ²„μ˜ 곡개 ν‚€ λ˜λŠ” μΈμ¦μ„œλ₯Ό 얻은 ν›„ ν•˜λ“œμ½”λ”©ν•©λ‹ˆλ‹€. μ„œλ²„μ˜ 곡개 ν‚€ λ˜λŠ” μΈμ¦μ„œλŠ” 외뢀에 λ…ΈμΆœλ˜μ–΄λ„ 되고, ν•˜λ“œμ½”λ”©μ„ ν•˜μ˜€μ„ λ•Œ 앱이 μ„œλ²„μ™€ μ•ˆμ „ν•œ 톡신을 μˆ˜ν–‰ν•  λ•Œ 앱은 μ„œλ²„μ˜ 곡개 ν‚€λ‚˜ μΈμ¦μ„œκ°€ μ˜ˆμƒν•œ 것과 μΌμΉ˜ν•˜λŠ”μ§€ 확인할 수 있게 λ©λ‹ˆλ‹€.

iOSμ—μ„œ SSL Pinning을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” NSURLSessionDelegate의 didReceive λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ μ„œλ²„μ˜ 곡개 ν‚€ λ˜λŠ” μΈμ¦μ„œμ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 내에 μ €μž₯된 ν‚€λ₯Ό λΉ„κ΅ν•˜μ—¬ κ²€μ¦ν•˜κ²Œ λ©λ‹ˆλ‹€.

SSL Pinning κΈ°λŠ₯을 μ œκ³΅ν•  λ•Œ μ£Όμ˜ν•  μ μœΌλ‘œλŠ” μ„œλ²„μ˜ SSL, TLS μΈμ¦μ„œκ°€ κ°±μ‹ λ˜λ©΄ μ•±μ—μ„œλ„ μ—…λ°μ΄νŠΈν•˜μ—¬ 동기화λ₯Ό μ§„ν–‰ν•΄μ•Ό ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€. λ”°λΌμ„œ SSL Pinning을 톡해 μ€‘κ°„μž κ³΅κ²©μœΌλ‘œλΆ€ν„° 앱을 λ³΄ν˜Έν•  수 μžˆμ§€λ§Œ, μ„œλ²„μ˜ 변화에 μœ μ—°ν•˜κ³  μ‹ μ†ν•˜κ²Œ λŒ€μ‘ν•΄μ•Ό ν•˜λ―€λ‘œ μœ μ—°μ„±μ΄ λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

6. λ„€νŠΈμ›Œν¬ μš”μ²­, 응닡

μž…λ ₯ 데이터에 λŒ€ν•œ 검증을 μˆ˜ν–‰ν•˜μ—¬ SQL Injection, XSS, CSRF λ“±μ˜ μ•…μ˜μ μΈ μš”μ²­μœΌλ‘œλΆ€ν„° 앱을 λ³΄ν˜Έν•΄μ•Ό ν•©λ‹ˆλ‹€. λ˜ν•œ μ„œλ²„λ‘œλΆ€ν„° 받은 데이터λ₯Ό μ‹ λ’°ν•  수 μžˆλŠ”μ§€ κ²€μ¦ν•˜λŠ” 것도 μ€‘μš”ν•˜κ³  디버깅 μ‹œ λ§Žμ€ 정보λ₯Ό μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœν•˜μ§€ μ•Šλ„λ‘ κ΄€λ¦¬ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

7. 데이터 μ €μž₯

λ§ˆμ§€λ§‰μœΌλ‘œ μ• ν”Œμ΄ μ œκ³΅ν•˜λŠ” μ•”ν˜Έν™”λœ λ³΄μ•ˆ μ €μž₯μ†Œ 쀑 ν•˜λ‚˜μΈ Keychain을 톡해 μ‚¬μš©μž 인증 정보, 토큰 λ“±μ˜ λ―Όκ°ν•œ 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. iOSμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” CoreData, UserDefaultsμ—μ„œλ„ μ•”ν˜Έν™”λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ Secure Enclaveλ₯Ό μ‚¬μš©ν•˜μ—¬ μ€‘μš”ν•œ ν‚€λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.





2. 데이터 μ €μž₯ 및 λ³΄μ•ˆ

iOS ν™˜κ²½μ—μ„œ μ‚¬μš©μžμ˜ 데이터λ₯Ό λ””λ°”μ΄μŠ€ 내에 μ•ˆμ „ν•˜κ²Œ λ³΄κ΄€ν•˜κΈ° μœ„ν•΄μ„œλŠ” XML, Plist, SQLite, Keychain, CoreData, UserDefaults, Temporary File(Cache) 등을 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1. Plist

PlistλŠ” μ•± 데이터 및 μ„€μ • 정보λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” XML νŒŒμΌμ΄λ‹€. Plistλ₯Ό 톡해 μ €μž₯된 λ°μ΄ν„°λŠ” μ•”ν˜Έν™”λ˜μ§€ μ•Šκ³  μ‰½κ²Œ μ ‘κ·Όν•  수 있기 λ•Œλ¬Έμ— 기밀성을 보μž₯ν•΄μ•Ό ν•˜λŠ” 데이터듀을 μ €μž₯ν•˜κΈ°μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이번 ν”„λ‘œμ νŠΈμ—μ„œ 카카였 μ†Œμ…œ λ‘œκ·ΈμΈμ„ κ΅¬ν˜„ν•˜λŠ” κ³Όμ •μ—μ„œ 카카였 μ•± ν‚€λ₯Ό PlistνŒŒμΌμ— μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λ‹€κ°€ 이λ₯Ό μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œ μ–΄λ–»κ²Œ κ΄€λ ¨ 이슈λ₯Ό ν•΄κ²°ν•˜μ˜€λŠ”μ§€ μžμ„Έν•˜κ²Œ μ •λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

2. UserDefaults

UserDefaultsλŠ” 앱을 μ’…λ£Œν•˜μ—¬λ„ λ‘œμ»¬μ— λ‚¨μ•„μžˆκ³ , 앱을 μ‚­μ œν•  λ•Œ 데이터가 같이 μ‚­μ œλ˜λ―€λ‘œ 일반적으둜 μ‚¬μš©μžμ˜ κΈ°λ³Έ μ„€μ • 및 속성을 μ €μž₯ν•˜κΈ°μ— μ ν•©ν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ Plist와 λ§ˆμ°¬κ°€μ§€λ‘œ λ³„λ„μ˜ μ•”ν˜Έν™” 과정이 μ—†κΈ° λ•Œλ¬Έμ— 기밀성을 μœ μ§€ν•΄μ•Όν•˜λŠ” 데이터듀을 μ €μž₯ν•˜κΈ°μ—λŠ” λΆ€μ ν•©ν•©λ‹ˆλ‹€.

3. Keychain

킀체인은 λ―Όκ°ν•œ 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•  수 μžˆλŠ” μ•”ν˜Έν™”λœ λ°μ΄ν„°λ² μ΄μŠ€μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ‚¬μš©μž 인증 정보, 토큰 λ“±μ˜ λ―Όκ°ν•œ 정보듀을 μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜κΈ°μ— μ ν•©ν•©λ‹ˆλ‹€.
킀체인은 SQList λ°μ΄ν„°λ² μ΄μŠ€λ‘œ κ΅¬ν˜„λ˜μ–΄ 있고 λ‹€μ–‘ν•œ APIλ₯Ό 톡해 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
macOSμ—μ„œλŠ” λͺ¨λ“  앱이 μ›ν•˜λŠ” 만큼 킀체인을 λ§Œλ“€ 수 있고 둜그인 κ³„μ •λ§ˆλ‹€ 킀체인이 μ‘΄μž¬ν•˜μ§€λ§Œ, iOS의 킀체인은 λͺ¨λ“  μ•±μ—μ„œ ν•˜λ‚˜μ˜ ν‚€μ²΄μΈλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

킀체인은 iOS λ””λ°”μ΄μŠ€μ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ΄ μžˆλŠ” μ•±λ§Œμ΄ 데이터에 μ ‘κ·Όν•  수 μžˆλ„λ‘ κ΅¬ν˜„μ΄ λ˜μ–΄μžˆκ³ , μ €μž₯λ˜λŠ” λ°μ΄ν„°λŠ” ν•˜λ“œμ›¨μ–΄ 기반의 μ•”ν˜Έν™” κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έλ©λ‹ˆλ‹€. λ˜ν•œ TouchID, FaceID와 같은 생체 인식을 μ‚¬μš©ν•˜μ—¬ 킀체인에 μ €μž₯된 데이터에 μ ‘κ·Όν•  수 μžˆμœΌλ―€λ‘œ μ• ν”Œ κΈ°κΈ°μ—μ„œ μ‚¬μš©ν•˜κΈ°μ— 맀우 νŽΈλ¦¬ν•©λ‹ˆλ‹€.
λ˜ν•œ ν‚€μ²΄μΈμ˜ kSecAttrAccessGroup 속성을 μ΄μš©ν•˜μ—¬ λ™μΌν•œ κ°œλ°œμžκ°€ μ„œλͺ…ν•œ μ•± 간에 데이터λ₯Ό κ³΅μœ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

일반적으둜 킀체인은 μ•ˆμ „ν•œ μ €μž₯μ†Œλ‘œ μ‚¬μš©λ˜μ§€λ§Œ, λͺ‡ κ°€μ§€ 곡격 μ‹œλ‚˜λ¦¬μ˜€κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

첫째둜 νƒˆμ˜₯ ν›„ keychain_dumper와 같은 λ„κ΅¬λ‘œ ν‚€μ²΄μΈμ˜ λ³΄μ•ˆμ„ μš°νšŒν•˜κ³  데이터에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ˜ν•œ μ•± λ‚΄μ—μ„œ μ‚¬μš©μžκ°€ μž…λ ₯ν•˜λŠ” 정보λ₯Ό κΈ°λ‘ν•˜κ±°λ‚˜ μŠ€ν¬λ¦°μƒ·μ„ ν™œμš©ν•˜μ—¬ 킀체인에 μ €μž₯λ˜λŠ” 정보λ₯Ό νƒˆμ·¨ν•  수 도 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” μ•…μ˜μ μΈ κ³΅κ²©μžκ°€ μ†ŒμŠ€μ½”λ“œλ₯Ό λΆ„μ„ν•˜κ³  μˆ˜μ •ν•˜μ—¬ 킀체인에 μ €μž₯된 데이터에 μ ‘κ·Όν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 곡격을 λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œ νƒˆμ˜₯ κ²€μΆœ κΈ°λŠ₯을 ν™œμš©ν•˜κ±°λ‚˜ μ‚¬μš©μžμ˜ μž…λ ₯을 νƒˆμ·¨ν•˜μ§€ λͺ»ν•˜λ„둝 Secure Text Input λ“±μ˜ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. CoreData

CoreDataλŠ” 킀체인과 λ§ˆμ°¬κ°€μ§€λ‘œ SQList λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 기반으둜 λ™μž‘ν•©λ‹ˆλ‹€.
ν•˜μ§€λ§Œ CoreDataλŠ” μ•”ν˜Έν™”λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ°μ΄ν„°λ² μ΄μŠ€μ— μ•ˆμ „ν•˜κ²Œ μ €μž₯λ˜μ–΄μ•Ό ν•˜λŠ” 정보에 λŒ€ν•΄μ„œλŠ” λ³„λ„μ˜ μ•”ν˜Έν™”κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
λ˜ν•œ SQL Injectionκ³Ό 같은 곡격이 λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ μ‚¬μš©μžμ˜ μž…λ ₯을 적절히 κ²€μ¦ν•˜μ—¬ CoreData에 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•΄μ•Όν•©λ‹ˆλ‹€.
CoreData둜 μ €μž₯된 데이터가 λ””λ°”μ΄μŠ€ 백업에 ν¬ν•¨λ˜λ©΄ λ³΄μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ NSFileProtection 속성을 ν™œμš©ν•˜μ—¬ λ””λ°”μ΄μŠ€ λ°±μ—…μ—μ„œ μ œμ™Έν•˜κ±°λ‚˜ 데이터λ₯Ό μ €μž₯ν•  λ•Œ 파일 보호 μ˜΅μ…˜μ„ μ„€μ •ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

5. Realm

Realm은 iOS와 μ•ˆλ“œλ‘œμ΄λ“œ λͺ¨λ‘μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•˜κ³ , μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆμ–΄ 일반적으둜 많이 μ‚¬μš©ν•˜λŠ” third-party λ°μ΄ν„°λ² μ΄μŠ€ 라이브러리 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. Realmμ—μ„œλŠ” λ―Όκ°ν•œ 데이터λ₯Ό μ•”ν˜Έν™”ν•˜μ—¬ μ €μž₯ν•˜κΈ° μœ„ν•΄ μ•”ν˜Έν™” 섀정을 ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 기밀성을 μœ μ§€ν•΄μ•Όν•˜λŠ” 데이터듀에 λŒ€ν•΄μ„œλŠ” 이λ₯Ό μœ λ…ν•˜κ³  섀정을 ν™œμ„±ν™”ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ 보관될 수 μžˆλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ³΄μ•ˆμ„ κ³ λ €ν•  λ•Œ μ†Œν”„νŠΈμ›¨μ–΄ 뿐만 μ•„λ‹ˆλΌ μ•„μ£Ό λ‹€μ–‘ν•œ λΆ„μ•Όλ“€κΉŒμ§€ κΌΌκΌΌν•˜κ²Œ 점검해야 ν•©λ‹ˆλ‹€.
μ‹œκ°„μ΄ μ§€λ‚ μˆ˜λ‘ ν•΄ν‚Ήκ³Ό κ΄€λ ¨ν•œ μ΄μŠˆλ“€μ΄ λŒ€λ‘λ˜κ³  λ³΄μ•ˆμ˜ μ€‘μš”μ„±μ΄ 점점 λ†’μ•„μ§€λ©΄μ„œ λ³΄μ•ˆ λ‚΄μž¬ν™”(Security by design)λ₯Ό μ μš©ν•˜λŠ” 것이 μΌλ°˜ν™” λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

iOS ν™˜κ²½μ—μ„œλŠ” μ•±μŠ€ν† μ–΄λ₯Ό 톡해 iOS앱을 μΆœμ‹œν•˜κΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ μž‘μ—… 없이 μ• ν”Œμ˜ λ§Žμ€ λ³΄μ•ˆ μ†”λ£¨μ…˜μ„ μ œκ³΅λ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ•±μŠ€ν† μ–΄μ— 처음 앱을 μΆœμ‹œν•  λ•Œμ—λŠ” 과정이 λ„ˆλ¬΄ μ–΄λ ΅κ²Œ λŠκ»΄μ§€κ³  μ™œ ν•΄μ•Όν•˜λŠ”μ§€ 의문이 λ“€μ—ˆμ§€λ§Œ μ• ν”Œμ΄ λ³΄μ•ˆμ„ μ–΄λ–»κ²Œ μƒκ°ν•˜λŠ”μ§€, 그리고 μ—¬λŸ¬κ°€μ§€ μ†”λ£¨μ…˜μ„ λ°›κΈ° μœ„ν•΄ ν•˜λŠ” μž‘μ—…μ΄λΌκ³  생각이 λ“€κ²Œ λ˜μ–΄μ„œ (그리고 점점 μ΅μˆ™ν•΄μ§€κΈ°λ„ ν•˜κ³ ) 였히렀 μ•±μŠ€ν† μ–΄ 등둝 과정이 λ³΅μž‘ν•œ 것이 닀행이라고 생각이 λ°”λ€Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ•±μŠ€ν† μ–΄λ₯Ό 톡해 앱을 μΆœμ‹œν•˜κ²Œ λ˜λ©΄μ„œ μ‚¬μš©μžλ“€μ€ 앱이 μ• ν”Œμ—μ„œ μΈμ¦ν•œ κ°œλ°œμžκ°€ κ°œλ°œν•˜κ³  μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ•„λ‹ˆλ©° λ§Žμ€ λ³΄μ•ˆ μœ„ν˜‘μœΌλ‘œλΆ€ν„° μ•ˆμ „ν•œ μ•±μž„μ„ 보μž₯받을 수 μžˆμŠ΅λ‹ˆλ‹€. λ°˜λŒ€λ‘œ κ°œλ°œμžλ“€μ€ κ³΅κ²©μžλ‘œλΆ€ν„° μžμ‹ μ˜ μ„œλΉ„μŠ€λ₯Ό λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

profile
Hello

0개의 λŒ“κΈ€