Online Tracking은 인터넷 상에서의 사용자의 활동 내역을 모니터링하거나 추적하는 것을 의미합니다.
온라인 추적은 개인정보보호나 프라이버시 침해 문제와 관련되어 있기도 합니다.
인터넷 상에 존재하는 것은 어떤 것도 사적이지 않습니다. 우리가 신뢰하는 검색 엔진에 접속하는 순간부터 브라우저는 방문한 웹사이트에 우리들의 정보를 전달하게 되고, 브라우저를 통해 웹사이트에서 상호작용할 때마다 구성 정보뿐만 아니라 우리들을 식별할 수 있는 데이터도 전송됩니다.
Online Tracking의 대표적인 네 가지 개념을 알아보겠습니다.
Fingerprinting
인터넷 서핑으로 여러 가지 정보를 찾았을 때, 그 관련된 정보들이 소셜미디어 광고로 다시 화면에 보여진 적이 있을 겁니다. 그건 단순히 우연히 아닙니다. 우리들의 인터넷 검색 과정에서 남긴 흔적들을 감지하는 프로그램들이 있기 때문에 가능한 것입니다. 아마 여러분이 무엇을 하는지 추적하기 위해, 우리들의 동의를 구한 질문을 보신 적이 있을 것입니다.
아이폰에서는 앱마다 Tracking을 허용할 것인지 설정할 수 있다.
이러한 Tracking은 우리들의 관심사를 파악하고 추천 정보를 제공하기 위해 웹사이트 방문 기록을 추적하는 것입니다.
이런 Tracking으로 여러분이 누구인지, 무엇을 좋아하는지, 어디를 다녀왔는지까지 알 수 있게 됩니다.
이런 흔적들은 여러분이 의심하지 않는다면 큰 문제가 되지 않을 수 있습니다.
하지만 여러분들이 OSINT 분석가로서 대상에게 감지되지 않으려 한다면 이러한 흔적들은 치명적일 수 있습니다.
이는 대상이 여러분의 존재를 알아차리게 할 뿐만 아니라, 그 흔적을 이용해 여러분이 누구인지까지 파악할 수 있게 합니다. 여러분이 오히려 역으로 위험해질 수도 있는 것이죠.
IP Addresses
우리를 세상에서 연결시켜주는 IP 주소가 우리를 배신할 수도 있습니다.
인터넷을 사용할 때마다 우리들의 공인 IP 주소가 라우터를 통해 전송됩니다. 이를 통해 웹사이트와 통신할 수 있을 뿐만 아니라 웹사이트에 자신의 주소를 알려주고 어떤 리소스를 보내야 하며, 얼마나 걸릴지도 알려주게 됩니다.
이 작은 요소가 우리들의 정체성을 가장 쉽게 드러내고, 상대방이 인식할 수 있다는 점을 항상 기억해야 합니다.
Cookies
거의 모든 웹사이트가 최적화되고 사용자 친화적인 방식으로 작동하기 위해 쿠키라는 요소를 사용하고 있습니다.
쿠키는 로그인 정보, 개인화된 설정, 심지어 장바구니에 있던 내역까지 저장합니다. 그러나 이러한 항목 중 일부는 웹사이트가 우리들에 대해 더 많이 알 수 있게 해주는 주된 이유이기도 합니다. 이 쿠키가 바로 Third-party persistent cookies 또는 tracking cookies라고 알려져 있는 것입니다.
Third-party persistent cookies는 웹사이트 사용자의 온라인 활동을 추적하고 모니터링하는 데 사용되는 쿠키입니다.
보통 사용자가 방문한 웹사이트가 아닌 다른 도메인에서 설치되는 쿠키로 주로 광고 네트워크나 데이터 분석 회사가 설치합니다. 이 쿠키는 오랫동안 사용자의 브라우저에 남아있고, 사용자의 활동 패턴을 장기간 추적하게 됩니다.
이러한 쿠키의 목적은 개인 맞춤형 광고 등을 제공하려는 것이 주 목적이나, Third-party persistent cookies는 사용자 프라이버시 침해 우려가 있어 많은 논란의 대상이 되고 있기도 합니다.
원치 않는다면 브라우저 설정에서 차단하거나 삭제할 수 있지만, 이는 웹사이트 기능에 지장을 줄 수도 있습니다.
Browser Fingerprinting
마지막으로, Browser Fingerprinting은 사용자의 웹 브라우저와 기기 정보를 활용하여 사용자를 식별하는 기술입니다.
브라우저 유형(크롬, 사파리 등), 버전, 언어 설정, 플러그인, 폰트, 타임존, 화면 크기까지 정보를 수집합니다.
이러한 정보가 사용자별 고유한 Fingerprint를 생성합니다. 이를 통해 사용자를 식별하고 추적할 수 있게 됩니다.
쿠키를 차단하고, 익명 브라우징을 사용해도 브라우저 Fingerprint 정보로 사용자를 식별할 수 있습니다.
이 디지털 핑거프린트가 실제로 가장 위험하고 침입적인 요소입니다.
실제로 웹 브라우저가 제공하는 정보를 확인할 수 있는 여러 페이지가 존재하며 대표적인 페이지를 알려드립니다.
OSINT(Open-Source Intelligence)는 공개된 출처에서 얻은 정보들을 의미합니다. OSINT는 주로 법집행(law enforcemnet), 사이버 범죄 활동, 비즈니스 환경 등에 널리 사용되고 있습니다.
OSINT(Open-Source Intelligence)는 사이버 보안과 다양한 분야에서 핵심적인 역할을 담당하는 강력한 도구입니다. 공격자와 방어자, 비즈니스 및 법 집행 기관 모두가 OSINT를 활용하여 자신의 목적을 달성할 수 있습니다.
OSINT로 수집한 데이터는 공격자에게는 표적 식별 및 취약점 발견의 기반이 되고, 방어자에게는 공격 표면 축소와 대응 전략 수립의 기반이 됩니다. 또한 기업은 OSINT로 경쟁사 모니터링, 고객 이해도 제고, 보안 위험 관리 등을 수행할 수 있으며, 정부 기관은 OSINT로 범죄자 추적과 프로파일링을 실행할 수 있습니다.
OSINT로 활용될 수 있는 예시
OSINT의 데이터 예시를 살펴보겠습니다.
1. Job Description에 회사 내부 시스템에 대한 정보를 기재할 경우
회사에서 시스템 관리자를 채용하기 위해 직무 설명서에 "Windows Server 2022 및 Ubuntu를 잘 다루는 경력자를 채용 중입니다."
라는 내용은 회사 내부 시스템에 대한 정보를 누설하는 것으로, 공격자는 이를 이용해 네트워크에 침투한 뒤 Lateral movement 혹은 privilege escalation을 계획할 수 있게 됩니다.
2. 회사 공식 웹 페이지에서 일부 직원들 혹은 전체 직원을 소개할 경우
특정 부서나 혹은 전체 직원을 소개하는 페이지가 있다고 가정합니다. 예를 들면, "저희 보안 팀을 소개합니다!"
회사의 공개된 정보를 보며 공격자는 매우 쉽게 사회공학 공격의 대상이 될 수 있는 직원들의 목록을 수집할 수 있고 회사의 조직도를 쉽게 파악하게 됩니다. 공격자는 특정 직원을 향해 스피어피싱을 하기 쉬워지겠죠...
심지어 어떤 회사는 직원들의 연락처, 이메일 주소까지 공개하기도 하는데 이는 사회공학 공격을 크게 도와주는 행위입니다.
3. 개인의 소셜미디어 프로필
개인의 소셜미디어 프로필을 통해 잘 구축된 개인정보들은 특정 개인을 더 잘 이해하고 다양한 정보를 수집할 수 있습니다.
생년월일, 거주지, 친구, 관심사, 가족 등.
4. 소셜미디어에 게시된 지오태깅된 사진 및 메타데이터에 포함된 기기 정보
소셜미디어에 게시된 지오태깅된 사진과 메타데이터에 포함된 기기 정보를 통해 사진에서 촬영된 위치와 기기를 한 번에 알아낼 수 있습니다.
위에서 언급한 예시는 수많은 공개된 데이터 중 일부일 뿐입니다.
이러한 정보들을 잘 활용한다면 공격자와 방어자 모두에게 유용하게 활용될 수 있습니다.
공격자는 은밀하게 목표물에 대한 정보를 충분히 파악하여 이를 토대로 공격 계획을 세울 수도 있습니다.
반면 블루팀은 인터넷상에 공개된 정보가 어떤 것들이 있는지 파악하고, 사용자 교육 훈련 및 소셜미디어에 대한 보안 대책을 마련할 수 있습니다.
OSINT가 유용한 이유
크게 4가지 역할군으로 나누어서 유용한 이유에 대해 설명할 수 있습니다.
Blue Team / Defenders
방어하는 입장에서 OSINT가 왜 유용할까요?
인터넷에 공개된 정보들 속에서 방어자들은 공개된 정보를 줄이거나 다른 방법을 통해 공격을 완화시키거나 그 효과를 감소시킬 수 있습니다.
만약 공격자가 회사 내 직원에 대한 상세한 프로필 정보를 보고 똑같이 변장한다면 이는 매우 위험하게 악용될 가능성이 높습니다. 공격자를 돕는 정보를 줄이거나 제거함으로써, 방어자는 공격 표면(attack surface), 즉 공격자가 내부 시스템에 접근할 수 있는 영역을 줄일 수 있습니다.
이러한 활동은 종종 공개 노출 평가(public exposure assessments)라고 불리기도 합니다. 직원들이 소셜 미디어에 올린 정보 수집, 인터넷에 노출된 내부 자산 식별, DNS 검사, 오래된 로그인 포털이나 웹사이트 찾기 등이 해당합니다.
Red Team / Hackers / Attackers
공격하는 입장에서 OSINT를 잘 활용한다면 기업이 사용하는 시스템을 파악하고, 잠재적인 취약점과 공격 방법을 사전에 계획할 수 있습니다.
직원 정보를 수집하면 사회공학 공격과 스피어피싱 이메일을 효과적으로 실행할 수 있습니다. 공격자는 피해자에게 더 신뢰할 만한 것으로 보이도록 공격을 설계할 수 있습니다.
따라서 기업은 자사의 시스템과 직원들이 온라인에서 공유하는 정보에 주의를 기울여야 합니다. 이러한 정보를 악의적인 목적으로 수집하는 과정을 목표 정보 수집(target information gathering) 또는 수동 정보 수집(passive information gathering)이라고 일컫습니다. 이는 공격자가 대상 시스템과 직접 상호작용하지 않고 정보를 수집할 수 있기 때문입니다.
비즈니스
비즈니스 상황에서는 어떻게 활용될까요?
기업들은 OSINT를 활용하여 경쟁업체를 모니터링하고, 시장 동향을 파악하며, 고객에 대한 정보를 더 잘 이해하고 효과적으로 소통할 수 있습니다. 또한 데이터를 통해 비즈니스 운영을 개선하고, 유출된 자격 증명 정보, 직원들의 기밀 정보, 해커들의 공격 계획 등 보안 위험도 모니터링할 수 있습니다.
특히 경쟁업체의 소셜미디어 채널을 모니터링하여 그들의 강점을 파악하여 자사의 소셜미디어 및 마케팅 전략을 보완할 수 있습니다.
법 집행기관
정부와 경찰 기관은 범죄자, 용의자, 테러리스트와 같은 주요 대상자를 추적하기 위해 OSINT를 활용할 수 있습니다.
프로파일링은 개인에 대한 정보를 수집하여 그의 성격과 행동 패턴을 파악하는 활동으로 개인의 관심사와 이전 위치를 바탕으로 특정 시간에 그가 어디에 있을지까지 예측할 수 있습니다.
OSINT는 온라인상에서 자신을 숨기지 못한 사이버 범죄자의 신원을 밝혀내는 데 활용될 수 있습니다.
Trace Labs와 같은 비영리 단체는 온라인 OSINT 대회를 개최하여 실종자 추적과 법 집행 기관을 지원하기도 합니다.
이 글은 쿠버네티스 공식 영어 문서를 제 임의대로 약간(?) 수정하여 한국어로 수정하였습니다. 따라서 쿠버네티스에 대한 정확한 개요를 원하시는 분께서는 공식 영어 문서를 참조해주세요.
개요
Kubernetes는 선언적 구성과 자동화를 모두 촉진하는 컨테이너화된 워크로드 및 서비스를 관리하기 위한 이식 가능하고 확장 가능한 오픈 소스 플랫폼입니다. 규모가 크고 빠르게 성장하는 생태계를 가지고 있습니다.
Kubernetes라는 이름은 조타수 또는 조종사를 의미하는 그리스어에서 유래되었습니다. K8s는 "K"와 "s" 사이의 8개 문자를 세어 만든 약어입니다. Google은 2014년에 Kubernetes 프로젝트를 오픈소스화했습니다. Kubernetes는 Google이 15년 넘게 대규모로 프로덕션 워크로드를 실행한 경험과 커뮤니티의 동급 최고의 아이디어 및 사례를 결합합니다.
과거에는. . .
과거와 비교하며 Kubernetes가 왜 유용한지 살펴보겠습니다.
기존 배포 방식 (Traditional Deployment):
초기에 조직은 물리적 서버에서 애플리케이션을 실행했습니다. 물리적 서버에서는 애플리케이션에 대한 리소스 경계를 정의할 방법이 없었으며 이로 인해 리소스 할당 문제가 발생했습니다. 예를 들어, 여러 애플리케이션이 물리적 서버에서 실행되는 경우 한 애플리케이션이 대부분의 리소스를 차지하여 결과적으로 다른 애플리케이션의 성능이 저하되는 경우가 있을 수 있습니다. 이에 대한 해결책은 각 애플리케이션을 서로 다른 물리적 서버에서 실행하는 것입니다. 그러나 리소스 활용도가 낮기 때문에 확장이 불가능했고 조직에서 많은 물리적 서버를 유지하는 데 비용이 많이 들었습니다.
가상화 배포 방식 (Virtualized Deployment):
솔루션으로 가상화가 도입되었습니다. 이를 통해 단일 물리적 서버의 CPU에서 여러 가상 머신(VM)을 실행할 수 있습니다. 가상화를 사용하면 VM 간에 애플리케이션을 격리할 수 있으며, 한 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스할 수 없으므로 보안 수준을 제공합니다.
가상화를 사용하면 물리적 서버의 리소스 활용도가 향상되고 애플리케이션을 쉽게 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있으므로 확장성이 향상됩니다. 가상화를 사용하면 일련의 물리적 리소스를 일회용 가상 머신 클러스터로 제공할 수 있습니다.
각 VM은 가상화된 하드웨어 위에 자체 운영 체제를 포함한 모든 구성 요소를 실행하는 완전한 시스템입니다.
컨테이너 배포 방식 (Container Deployment)
컨테이너는 VM과 유사하지만 애플리케이션 간에 운영 체제(OS)를 공유하기 위한 완화된 격리 속성을 가지고 있습니다. 따라서 컨테이너는 경량으로 간주됩니다. VM과 유사하게 컨테이너에는 자체 파일 시스템, CPU 공유, 메모리, 프로세스 공간 등이 있습니다. 기본 인프라에서 분리되므로 클라우드와 OS 배포판 간에 이식 가능합니다.
컨테이너의 이점
민첩한 애플리케이션 생성 및 배포: VM 이미지 사용에 비해 컨테이너 이미지 생성의 용이성과 효율성이 향상되었습니다.
지속적인 개발, 통합 및 배포: 빠르고 효율적인 롤백을 통해 안정적이고 빈번한 컨테이너 이미지 빌드 및 배포를 제공합니다(이미지 불변성으로 인해).
개발 및 운영의 우려 사항 분리: 배포 시간이 아닌 빌드/릴리스 시간에 애플리케이션 컨테이너 이미지를 생성하여 인프라에서 애플리케이션을 분리합니다.
관찰 가능성: OS 수준 정보 및 지표뿐만 아니라 애플리케이션 상태 및 기타 신호도 표시합니다.
개발, 테스트, 생산 전반에 걸친 환경적 일관성: 클라우드에서와 마찬가지로 노트북에서도 동일하게 실행됩니다.
클라우드 및 OS 배포 이식성: Ubuntu, RHEL, CoreOS, 온프레미스, 주요 퍼블릭 클라우드 등 어디에서나 실행됩니다.
애플리케이션 중심 관리: 가상 하드웨어에서 OS를 실행하는 것에서 논리적 리소스를 사용하여 OS에서 애플리케이션을 실행하는 것으로 추상화 수준을 높입니다.
느슨하게 결합되고, 분산되고, 탄력적이고, 자유로운 마이크로 서비스: 애플리케이션은 더 작고 독립적인 조각으로 분할되며 하나의 큰 단일 목적 시스템에서 실행되는 모놀리식 스택이 아니라 동적으로 배포 및 관리될 수 있습니다.
리소스 격리: 예측 가능한 애플리케이션 성능.
자원 활용: 높은 효율성과 밀도.
Kubernetes가 필요한 이유와 Kubernetes가 수행할 수 있는 작업
컨테이너는 애플리케이션을 번들링하고 실행하는 좋은 방법입니다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 합니다. 예를 들어 컨테이너가 작동 중지되면 다른 컨테이너를 시작해야 합니다.
Kubernetes는 분산 시스템을 탄력적으로 실행할 수 있는 프레임워크를 제공합니다. 애플리케이션의 확장 및 장애 조치를 관리하고 배포 패턴 등을 제공합니다. 예시: Kubernetes는 시스템의 카나리아 배포를 쉽게 관리할 수 있습니다.
Kubernetes가 제공할 수 있는 이점
서비스 검색 및 로드 밸런싱 Kubernetes는 DNS 이름 또는 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있습니다. 컨테이너에 대한 트래픽이 높으면 Kubernetes는 배포가 안정적이도록 네트워크 트래픽의 부하를 분산하고 분산할 수 있습니다.
스토리지 오케스트레이션 Kubernetes를 사용하면 로컬 스토리지, 퍼블릭 클라우드 공급자 등 원하는 스토리지 시스템을 자동으로 마운트할 수 있습니다.
자동화된 롤아웃 및 롤백 Kubernetes를 사용하여 배포된 컨테이너에 대해 원하는 상태를 설명할 수 있으며 실제 상태를 제어된 속도로 원하는 상태로 변경할 수 있습니다. 예를 들어 Kubernetes를 자동화하여 배포를 위한 새 컨테이너를 생성하고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 채택할 수 있습니다.
자동 바이너리 패킹 쿠버네티스에게 컨테이너화된 작업을 실행할 수 있는 노드 클러스터를 제공합니다. 쿠버네티스에게 각 컨테이너가 얼마나 많은 CPU와 메모리(RAM)가 필요한지 알려줍니다. 쿠버네티스는 리소스를 최적으로 활용하기 위해 컨테이너를 노드에 맞게 배치할 수 있습니다.
자가 치유(Self-healing) 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, 사용자가 정의한 헬스 체크에 응답하지 않는 컨테이너를 종료하고, 클라이언트에게 제공 준비가 될 때까지 이를 공개하지 않습니다.
비밀 및 구성 관리 쿠버네티스는 비밀과 같은 민감한 정보(비밀번호, OAuth 토큰, SSH 키 등)를 저장하고 관리할 수 있습니다. 컨테이너 이미지를 다시 빌드하지 않고 비밀 및 애플리케이션 구성을 배포하고 업데이트할 수 있으며, 스택 구성에서 비밀을 노출시키지 않습니다.
배치 실행 서비스 외에도 쿠버네티스는 원하는 경우 실패한 컨테이너를 교체하여 배치 및 CI 워크로드를 관리할 수 있습니다.
수평 스케일링 CPU 사용량에 따라 간단한 명령, UI 또는 자동으로 애플리케이션을 확장하고 축소합니다.
IPv4/IPv6 이중 스택 Pod 및 서비스에 IPv4 및 IPv6 주소를 할당합니다.
확장성을 위해 설계 상위 소스 코드를 변경하지 않고 쿠버네티스 클러스터에 기능을 추가할 수 있도록 설계되었습니다.
쿠버네티스가 아닌 것 What Kubernetes is not
쿠버네티스는 전통적인 모든 기능이 포함된 PaaS(Platform as a Service) 시스템이 아닙니다. 쿠버네티스는 하드웨어 수준이 아닌 컨테이너 수준에서 작동하기 때문에 배포, 확장, 로드 밸런싱과 같은 PaaS 제공 기능에 일반적으로 적용되는 몇 가지 기능을 제공하지만 사용자가 로깅, 모니터링 및 경고 솔루션을 통합할 수 있도록 합니다. 그러나 쿠버네티스는 단일체가 아니며 이러한 기본 솔루션은 선택 사항이며 플러그인 가능합니다. 쿠버네티스는 개발자 플랫폼을 구축하기 위한 기본 블록을 제공하지만 사용자의 선택과 유연성을 중요시합니다.
쿠버네티스는. . .
쿠버네티스가 지원하는 애플리케이션 유형을 제한하지 않습니다. 쿠버네티스는 상태가 없는(stateless), 상태를 유지하는(stateful), 데이터 처리 작업 등 다양한 작업 유형을 지원하기 위해 노력합니다. 애플리케이션이 컨테이너에서 실행될 수 있다면, 쿠버네티스에서도 잘 실행될 것입니다.
쿠버네티스는 소스 코드를 배포하거나 애플리케이션을 빌드하지 않습니다. 지속적 통합, 전달 및 배포(CI/CD) 워크플로는 조직 문화와 선호도 및 기술적 요구에 따라 결정됩니다.
쿠버네티스는 미들웨어(예: 메시지 버스), 데이터 처리 프레임워크(예: 스파크), 데이터베이스(예: MySQL), 캐시, 클러스터 스토리지 시스템(예: Ceph)과 같은 응용 프로그램 수준의 서비스를 제공하지 않습니다. 이러한 구성 요소는 쿠버네티스에서 실행될 수 있으며, Open Service Broker와 같은 이식 가능한 메커니즘을 통해 쿠버네티스에서 실행 중인 애플리케이션에서 액세스할 수 있습니다.
쿠버네티스는 로깅, 모니터링 또는 경고 솔루션을 지시하지 않습니다. 몇 가지 통합을 개념 증명으로 제공하고 메트릭을 수집하고 내보내는 메커니즘을 제공합니다.
쿠버네티스는 구성 언어/시스템(예: Jsonnet)을 제공하거나 채택하지 않습니다. 임의의 형태의 선언적 명세를 대상으로 하는 선언적 API를 제공합니다.
쿠버네티스는 종합적인 기계 구성, 유지 관리, 관리 또는 자가 치유 시스템을 제공하거나 채택하지 않습니다.
또한, 쿠버네티스는 단순한 오케스트레이션 시스템이 아닙니다. 실제로, 오케스트레이션의 필요성을 제거합니다. 오케스트레이션의 기술적 정의는 정의된 워크플로를 실행하는 것입니다: 먼저 A를 하고, 그 다음에 B를 하고, 그 다음에 C를 합니다. 반면에 쿠버네티스는 현재 상태를 지속적으로 제공된 원하는 상태로 이동시키는 독립적이고 조립 가능한 제어 프로세스 집합으로 구성됩니다. A에서 C로 가는 방법이 중요하지 않아야 합니다. 중앙 집중식 제어도 필요하지 않습니다. 이로 인해 사용하기 쉽고 강력하며 견고하고 탄력적이며 확장 가능한 시스템이 됩니다.
추가적인 내용
kubelet:
kubelet은 각 노드에서 실행되는 Kubernetes의 에이전트입니다. 마스터 노드에서 발행된 명령을 수신하고 노드 상태를 보고합니다.
kubelet은 각 노드에서 Pod을 관리하고, Pod을 구성하는 컨테이너를 실행하고 모니터링합니다.
kubelet은 API 서버와 통신하여 배치할 Pod의 목록을 받고, 해당 노드에서 Pod을 실행하고 상태를 유지 관리합니다.
kube-proxy:
kube-proxy는 Kubernetes 클러스터에서 서비스의 네트워크 트래픽을 관리하는 데 사용됩니다.
서비스가 생성될 때 kube-proxy는 해당 서비스를 위한 가상 IP 주소와 포트를 할당하고, 서비스에 대한 요청을 실제 Pod으로 라우팅합니다.
이를 통해 클러스터 외부에서 서비스에 접근할 수 있고, 서비스의 로드 밸런싱 및 고가용성을 제공할 수 있습니다.
Container Runtime:
컨테이너 런타임은 컨테이너를 실행하고 관리하는 데 사용되는 소프트웨어입니다. Kubernetes는 여러 가지 컨테이너 런타임을 지원하며, 대표적으로 Docker, containerd, CRI-O 등이 있습니다.
컨테이너 런타임은 Docker와 같은 도구를 사용하여 컨테이너 이미지를 다운로드하고 실행하며, 컨테이너의 라이프사이클을 관리합니다.
딥링킹은 특정 유형의 링크를 처리하고 사용자를 앱(예: 특정 활동)으로 직접 보내는 메커니즘입니다.
사용자가 모바일 앱으로 직접 특정 콘텐츠로 연결되도록 하는 링크를 생성하는 기술입니다. 이를 통해 웹사이트나 다른 앱에서 특정 앱의 특정 화면으로 이동할 수 있습니다. 일반적으로 다음과 같은 기능과 장점이 있습니다:
사용자 경험 개선: Deep Linking은 사용자가 특정 콘텐츠로 쉽게 이동할 수 있도록 도와줍니다. 예를 들어, 특정 제품 상세 페이지로 바로 이동하거나 앱에서 로그인이나 결제 페이지로 이동할 수 있습니다.
마케팅 및 프로모션: 웹사이트나 소셜 미디어에서 앱의 특정 콘텐츠를 직접 링크하여 사용자들을 앱으로 유도할 수 있습니다. 이를 통해 앱 다운로드, 사용자 활동 증가 등을 도모할 수 있습니다.
측정 및 분석: Deep Linking을 통해 사용자의 행동을 추적하고 분석할 수 있습니다. 특정 링크를 통해 사용자가 앱으로 어떻게 이동하는지를 추적하여 사용자 동작을 이해하고 사용자 경험을 개선할 수 있습니다.
SEO 향상: 안드로이드 앱의 Deep Linking을 구현하면 검색 엔진이 해당 앱의 콘텐츠를 색인화하고 검색 결과에 표시할 수 있습니다. 이는 앱의 발견성을 향상시키고 유기적인 트래픽을 늘리는 데 도움이 됩니다.
Android에서는 개발자가 두 가지 유형의 링크를 만들 수 있습니다
딥링크
안드로이드 앱 링크
일반적으로 /.well-known/assetlinks.json 요청은 공격이 아닐 수 있습니다. 해당 URL은 Android 앱 링크로 사용자가 앱을 선택할 필요 없이, 웹사이트 URL을 클릭하면 Android 앱에서 콘텐츠가 바로 열리도록 하는 특별한 유형의 딥 링크입니다.
/.well-known/assetlinks.json은 Android 앱과 웹 사이트 간의 딥 링크 관련 인증 파일로, 안드로이드 앱이 특정 웹 사이트에 대한 딥 링크를 처리할 수 있는 권한을 부여하는 데 사용됩니다. 공격자는 이를 이용하여 앱 사용자를 악의적인 앱으로 유도하거나 사용자의 개인 정보를 탈취하는 등의 악의적인 행위를 시도할 수 있습니다.
일반적으로 이러한 공격은 사용자가 악의적인 딥 링크를 통해 인증되지 않은 앱에 리디렉션되어 개인 정보를 요구하거나, 사용자의 기기에 악성 앱을 다운로드하도록 유도하는 형태로 이뤄질 수 있습니다.
대응방안
.well-known/assetlinks.json 파일을 안전하게 유지
인증서를 사용하여 암호화된 연결 설정 (SSL/TLS 인증서)
액세스 제어 설정 (불필요한 요청 차단)
파일 권한 설정 (디렉토리 및 하위 파일의 권한을 적절하게 설정)
로그 및 모니터링 설정 (액세스 로그 모니터링)
정기적인 보안 감사 (파일에 대한 정기적인 검토)
앱과 웹 서버 간의 딥 링크 권한을 정확하게 관리
사용자에게 앱과 관련된 딥 링크를 사용할 때 주의해야 함을 경고
/.well-known/assetlinks.json은 Android 앱과 웹 사이트 간의 딥 링크 관련 인증 파일로 공격자가 앱 사용자를 악의적인 앱으로 유도하거나 사용자의 개인 정보를 탈취하는 등의 악성행위 시도할 수 있음