이용자 또는 개인정보 취급자 등이 개인정보처리시스템에 접속하여 수행한 업무 내역에 대하여 식별자, 접속일시, 접속지를 알 수 있는 정보, 수행업무 등 접속한 사실을 전자적으로 기록한것을 말한다.
OECD 프라이버시 보호 8원칙
정보 정확성의 원칙
개인정보는 그 이용 목적에 부합하는 것이어야 하고, 이용 목적에 필요한 범위 내에서 정확하고 완전하며 최신의 상태로 유지해야 한다.
수집 제한의 원칙
개인정보의 수집은 합법적이고 공정한 절차에 의하여 가능한 한 정보주체에게 알리거나 동의를 얻은 후에 수집되어야 한다.
목적 명확화의 원칙
개인정보는 수집 시 목적이 명확하여야 하며 이를 이용할 경우에도 수집 목적의 실현 또는 수집 목적과 양립되어야 하고 목적이 변경될 때 마다 명확히 해야 한다.
이용 제한의 원칙
개인정보는 정보주체의 동의가 있는 경우나 법률의 규정에 의한 경우를 제외하고는 명확화된 목적 이외의 용도로 공개되거나 이용되어서는 안 된다.
안전성 보호의 원칙
개인정보의 분실, 불법적인 접근, 훼손, 사용, 변조, 공개 등의 위험에 대비하여 합리적인 안전보호장치를 마련해야 한다.
공개의 원칙
개인정보의 처리와 정보처리장치의 설치, 활용 및 관련 정책은 일반에게 공개해야 한다.
책임의 원칙
개인정보 관리자는 위에서 제시한 원칙들이 지켜지도록 필요한 제반조치를 취해야 한다.
개인정보 보호법 17조에서 정보주체의 개인정보를 제 3자에게 제공할 때 정보주체에게 알리고 동의를 받도록 하고 있다
개인정보를 제공 받는자
개인정보를 제공받는자의 개인정보 이용 목적
제공하는 개인정보의 항목
개인정보를 제공받는 자의 개인정보 보유 및 이용 기간
동의를 거부할 권리가 있다는 사실 및 동의 거부에 따른 불이익이 있는경우 그 불이익의 내용
개인정보 보호법의 영상정보처리기기의 설치 및 운영 제한관련 안내판
설치 목적 및 장소
촬영 범위 및 시간
관리책임자 성명 및 연락처
그 밖에 대통령령으로 정하는 사항
개인정보 안전성 확보조치 기준인 개인정보보호위원회 고시에 따르면 개인정보처리자는 개인정보의 분실, 도난, 유출, 위조, 변조 또는 훼손되지 아니하도록 내부 의사결정 절차를 통하여 내부관리계획을 수립, 시행 하여야 한다.
개인정보의 안전성 확보조치
개인정보 처리자
업무를 목적으로 개인정보파일을 운용하기 위하여 스스로 또는 다른사람을 통하여 개인정보를 처리하는 공공기관, 법인, 단체 및 개인 등을 말한다.
개인정보 취급자
개인정보처리자의 지휘, 감독을 받아 개인정보를 처리하는 임직원, 파견근로자, 시간제근로자 등을 말한다.
개인정보처리시스템
개인정보를 처리할 수 있도록 체계적으로 구성한 데이터베이스 시스템을 말한다.
비밀번호
정보주체 또는 개인정보취급자 등이 개인정보처리시스템, 업무용 컴퓨터 또는 정보통신망 등에 접속할 때 식별자와 함께 입력하여 정당한 접속 권한을 가진자라는 것을 식별할 수 있도록 시스템에 전달해야 하는 고유의 문자열로서 타인에게 공개되지 않는 정보를 말한다.
내부망
물리적 망분리, 접근 통제시스템 등에 의해 인터넷 구간에서의 접근이 통제 또는 차단되는 구간을 말한다.
접근통제
고유식별정보를 처리하는 개인정보 처리자는 인터넷 홈페이지를 통해 고유식별정보가 유출, 변조, 훼손되지 않도록 연 1회 이상 취약점을 점검하고 필요한 보완 조치를 하여야 한다.
DMZ
물리적인 네트워크 구성에서 외부 네트워크와 내부 네트워크 사이에 위치한 중간지점으로 내부 시스템을 보호하기 위해 접근통제시스템으로 접근통제를 수행하면서 인터넷으로부터의 접근과 내부망으로의 접근을 허용해주는 구간을 말한다.
안전성 확보조치
개인정보처리자는 개인정보 취급자가 개인정보처리시스템에 접속한 기록을 1년 이상 보관 관리 하여야 한다. 다만, 5만명 이상의 정보주체에 관하여 개인정보를 처리하거나 민감정보 또는 내부관리계획을 처리하는 개인정보처리시스템의 경우에는 2년 이상 보관하여야 한다.
개인정보처리자는 개인정보의 오남용 , 분실 도난 유출 위조 변조 또는 훼손 등에 대응하기 위하여 개인정보처리시스템의 접속기록을 월 1회 이상 점검하여야 한다.
개인정보를 다운로드한 것이 발견되었을 경우에는 내부관리계획으로 정하는 바에 따라 그 사유를 반드시 확인하여야 한다.
접속기록
개인정보취급자 등이 개인정보처리시스템에 접속하여 수행한 업무내역에 대하여 개인정보취급자 등의 계정, 접속일시, 접속지 정보, 처리한 정보주체 정보, 수행업무 등을 전자적으로 기록한 것을 말한다.
이 경우 ‘접속’이란 개인정보처리시스템과 연결되어 데이터 송신 또는 수신이 가능한 상태를 말한다.
개인정보처리자는 개인정보처리시스템의 접속기록 등을 월 1회 이상 점검하여야 한다. 특히 개인정보를 다운로드한 것이 발견되었을 경우에는 내부관리계획으로 정하는 바에 따라 그 사유를 반드시 확인하여야 한다.
내부관리 계획
정보통신서비스 제공자 등이 개인정보의 안전한 처리를 위하여 개인정보보호 조직의 구성, 개인정보취급자의 교육, 개인정보 보호조치 등을 규전한 계획을 말한다.
전자적 침해행위
정상적인 보호, 인증 절차를 우회하여 정보통신기반시설에 접근할 수 있도록 하는 프로그램이나 기술적 장치 등을 정보통신기반시설에 설치하는 방법으로 정보통신망 또는 이와 관련된 정보시스템을 공격하는 행위를 말한다
정보보호 사전점검
정보통신망의 구축 또는 정보통신서비스의 제공 이전에 계획 또는 설계 등의 과정에서 정보보호를 고려하여 필요한 조치를 하거나 계획을 마련하는것을 말한다.
위험
원하지 않는 사건이 발생하여 손실 또는 부정적인 영향을 미칠 가능성을 말한다.
취약성
자산의 잠재적 속성으로 위협의 이용 대상이 되는 것을 말한다. 자산이 위협에 대한 취약성을 가지고 있을 때 손실/피해가 발생하며 자산에 취약성이 없다면 위협이 발생한다고 해도 손실/피해가 발생하지 않는다.
정보자산 그룹핑의 개념
조사된 자산을 기밀성, 무결성, 가용성 평가 결과에 기초하여 자산 유형, 보안특성, 중요도가 같은 것들을 묶어서 공통 자산 그룹으로 명시하는 것을 말한다. 관련 위협 및 취약성 평가와 위험평가를 수행할 때 비밀성, 무결성, 가용성 특성에 근거하여 결과가 달라지므로 같은 결과가 나오는 자산에 대해서 동일한 작업을 여러 번 반복하지 않기 위해서이다.
장점
위험 분석을 수행할 때 3가지 특성 즉, 기밀성, 무결성, 가용성 특성에 근거하여 결과가 달라지므로 같은 결과가 나오는 자산에 대하여 그룹핑을 함으로써 동일한 작업을 여러번 반복 안해도 된다.
위험회피
위험이 존재하는 프로세스나 사업을 수행하지 않고 포기하는 것으로 자산 매각이나 설계변경 등 다른 대안을 선택하여 해당 위험이 실현되지 않도록 하는것을 말한다.
위험전가
보험이나 외주 등으로 잠재적 비용을 제 3자에게 이전하거나 할당하는 것으로 위험에 대비하여 보험을 들거나 다른 기관과 계약을 맺어 위협이 발생시키는 위험과 비용을 공유하는것을 말함.
디지털 자료가 법적 인정을 받기 위한 원칙
무결성의 원칙 : 증거 수집 이후에 변화x
정당성의 원칙 : 증거는 적법절차에 의해 수집되어야 하며 위법한 방법으로 수직된 증거는 효력 상실
연계 보관성의 원칙 : 증거물 획득 , 이송, 분석, 보관 , 법정 제출의 각 단계에서 담당자 및 책임자를 명확히 해야 한다
신속성의 원칙 ; 모든 과정은 신속하게 진행되어야 한다
재현의 원칙 : 피해 직전과 같은 조건에서 현장 검증을 실시하였다면, 동일한 결과가 나와야 한다.
> 분석 내용 > ognl injection이 시도될 경우, HttpServelet,service 부터 OgnlValueStack.findValue 스택이 호출되는 것으로 확인됨. > 이 중 OnlValueStack findValue(str)은 OGNL 표현식의 시작점으로, 아래의 스택 리스트가 호출되는 것으로 확인됨.
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171) at ognl.SimpleNode.getValue(SimpleNode.java:193) at ognl.Ognl.getValue(Ognl.java:333) at ognl.Ognl.getValue(Ognl.java:310)A at co m.opensymphony.xwork.util.OgnlValueStack.findValue(OgnlValueStack.java:141) at co m.opensymphony.xwork.util.TextParseUtil.translateVariables(TextParseUtil.java:39) at co m.opensymphony.xwork.ActionChainResult.execute(ActionChainResult.java:95) at co m.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:263) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:187) at co m.atlassian.confluence.xwork.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:21) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.atlassian.confluence.core.actions.LastModifiedInterceptor.intercept(LastModifiedInterceptor.java:27) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.atlassian.confluence.core.ConfluenceAutowireInterceptor.intercept(ConfluenceAutowireInterceptor.java:44) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.atlassian.xwork.interceptors.TransactionalInvocation.invokeAndHandleExceptions(TransactionalInvocation.java:61) at co m.atlassian.xwork.interceptors.TransactionalInvocation.invokeInTransaction(TransactionalInvocation.java:51) at co m.atlassian.xwork.interceptors.XWorkTransactionInterceptor.intercept(XWorkTransactionInterceptor.java:50) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.atlassian.confluence.xwork.SetupIncompleteInterceptor.intercept(SetupIncompleteInterceptor.java:61) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at com.atlassian.confluence.security.interceptors.SecurityHeadersInterceptor.intercept(SecurityHeadersInterceptor.java:26) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at co m.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165) at co m.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115) at com.atlassian.confluence.servlet.ConfluenceServletDispatcher.serviceAction(ConfluenceServletDispatcher.java:56) at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:199) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
> 특히 CVE-2022-26134 취약점이 시도될 경우, 아래의 과정을 거쳐 URI내 OGNL 표현식이 삽입되는 것으로 확인됨.
> namespace는 요청된 URI을 처리하는 com.opensymphony.webwork.dispatcher.ServletDispatcher.getNamespaceFromServletPath 에 의하여 생성됨.
public static String getNamespaceFromServletPath(String servletPath) { servletPath = servletPath.substring(0, servletPath.lastIndexOf("/")); return servletPath; } > 요약 정리 1). 요청 URI내 포함된 OGNL 표현식이 com.opensymphony.webwork.dispatcher.ServletDispatcher.getNamespaceFromServletPath: 의 함수에 의하여 namespace로 생성되며 2). 생성된 namespace는 검증과정 없이 TextParseUtil.translateVariables에서 ActionChainResult.execute로 전달됨. 3). 이후 TextParseUtil.class에서 OgnlValueStack.findValue를 호출하여 URI내 포함된 OGNL 공격 구문이 실행되는 것으로 확인.
> 패치 변경 점
> 기존의 TextParseUtil.translateVariables에서 ActionChainResult.execute로 전달되는 과정을 삭제 패치 전
1). 분석의 경우 기존 생성하여 사용 중인 "Confluence 취약점을 이용한 원격코드 실행 시도 탐지" 템플릿을 사용하여 분석. 2). 분석 과정에서 URI에 시도된 원격 코드 ex) bash shell, 시스템 정보 조회 등 에 대한 공격 성공 여부 확인 필요. 3). PoC 4번의 경우, "SERVER-APACHE Apache Struts OGNL getRuntime.exec static method access attempt" 으로 탐지되고 있어 분석 시 주의 필요.
Chat GPT는 OpenAI에서 개발한 대화형 인공지능 '챗봇'이다. 하지만 단순 챗봇이라면 이렇게 많은 사람들이 관심을 갖지는 않았을 것 같다.
ChatGPT는 인터넷 역사상 가장 빠르게 성장하는 소비자 앱으로 불과 2개월 만에 1억 명의 사용자를 확보할 수 있습니다.
출시된지 현재 3개월 가량되었고 2개월 만에 누적 사용자 1억명을 넘겼다. 지금까지 있던 많은 페이스북, 인스타 등 많은 어플리케이션이 있었지만 이렇게 시작부터 주목 받았던 것은 없다고 한다.
그렇다면 왜 이렇게 주목을 받는걸까?
필자가 생각했을때 가장 큰 이유는 '기능'이라고 생각한다. 이런 대화형 인공지능 챗봇이 아예 없었던것은 아니다. 하지만 질문의 내용과 학습에 따라 기자에게는 기사, 블로거에게는 글, 개발자에게는 코드, 학생들에겐 숙제, 논문 등 많은 내용의 답변을 해준다.
정말 대단하다고 생각한다. 블록체인이 열풍일 때도 그저 그런 바람일꺼라고 생각했다. 가상화폐로써 생산되어 지지만 실제적인 가치창조를 하는게 0에 가깝다고 생각했기에 미래 먹거리로써는 부족한면이 있지 않나 생각을 많이 했다.
하지만 지금의 Chat GPT 열풍은 다르다고 생각한다. 우선 생산성에서 엄청난 발전을 이룰것이라고 생각한다. Chat GPT가 답변해주는 내용이 퀄리티가 완벽하진 않을 수 있다. 하지만 이 것을 이용한다면 압도적인 시간으로 산출물을 만들어 갈 수 있다.
2. ChatGPT를 활용한 웹쉘 탐지 솔루션.
그 동안 우리는 무언가 시스템을 개발할때는 관련 언어에 대한 학습이 필요했다. 하지만 ChatGPT를 통하면 어떠한 언어에 대한 학습이 구지 필요하지 않다.
ChatGPT에게 웹쉘 탐지 시스템에 대한 예제를 물어봤다.
import os
# Define the directory to scan for webshells
directory = '/var/www/html/'
# Define a list of suspicious PHP functions used by webshells
suspicious_functions = ['exec', 'shell_exec', 'system', 'passthru', 'popen', 'proc_open']
# Define a list of file extensions to scan
file_extensions = ['.php', '.php5']
# Define a list to store the results of the scan
results = []
# Loop through all files in the directory and check for suspicious functions
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(tuple(file_extensions)):
path = os.path.join(root, file)
with open(path, 'r') as f:
for line in f:
for function in suspicious_functions:
if function in line:
results.append(path)
# Print the results of the scan
if results:
print('The following files may contain webshells:')
for result in results:
print(result)
else:
print('No webshells were found.')