- Secure Coding (시큐어 코딩) 이란 무엇인가요?
- 보안 취약점을 최소화하면서 안전한 소프트웨어를 개발하는 코딩 기법
- 보안 취약점을 최소화하면서 안전한 소프트웨어를 개발하는 코딩 기법
- SQL Injection 이란?
- 웹 어플리케이션에서 가장 흔하면서도 치명적인 보안 취약점으로
이 공격으로 단순 정보 탈취에서 그치지 않고
데이터 베이스 자체를 파괴할 수도 있어, 가장 주의해야 하는 보안 위협 입니다. SQL Injection 의 공격 원리
SQL Injection의 핵심은 사용자의 입력값이 검증 없이 SQL 쿼리문과 조합되서 실행되는 것
SQL Injection 예시
MX-GRID, i-MATRIX에서 수식으로 조합 (SQL 검증 없이 단순 조합 됨)
MATRIX VBA에서 SQL을 조합
SQL Injection 위협 & 그냥 보안 위배 (vba를 사용자가 접근할 수 있음.)
※ VBA에서 SQL을 만든다는 것은 데이터 소스에서 그냥 SQL 조합 함이 예상됨.- i-AUD의 데이터 소스에서 VN_?? 파라미터 오남용
- 조작 가능한 사용자 계정 정보를 사용 (세션 변수를 사용하지 않음.)
- 웹 어플리케이션에서 가장 흔하면서도 치명적인 보안 취약점으로
- SQL Injection 공격 회피 방법
VN_파라미터는 숫자값외에는 사용 절대 금지
VS_파라미터는 SQL 문자리터럴 ‘문자열값’ 형태로 자동 변경 되므로 문제가 되지 않음
VN_파라미터는 하위 호환성으로 인해 해당 값의 타입을 점검하지 않고 쿼리 조합이 발생함.
쿼리 조합이 필요한 경우는 Dynamic SQL 활용
조건에 따른 쿼리 조합, 또는 파라미터 값의 유효성을 검사 가능
자주 쓰는 함수는 사전에 정의하여 재활용이 가능함.
인증 정보를 기반으로 하는 모든 작업은 세션 변수를 사용한다.
Client(PC)에서 전송되는 데이터는 공격자에 의해서 변경될 수 있다.
네트워크 데이터 변조 및 브라우저의 개발자 기능으로 조작이 가능하다.
SSL 적용 또는 통신 구간 암호화 옵션 적용
네트워크로 전송되는 데이터에 대한 암호화 적용하여 데이터 조작 방지
※ 브라우져의 개발자 도구 등을 활용하여 데이터 조작이 가능하므로 근본적인 해결책은 아님
통신구간 암호화 설정
: https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=78708798
AUD 플랫폼에서 기본 제공하는 세션 변수
세션에 저장된 사용자 인증 관련 정보 목록
https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=108396697이름(고정) i-AUD Server Script /
Dynamic SQL 사용 서식
SQL 사용 서식
(i-META 조회 조건 값 서식)i-AUD JScript 사용시 세션 변수 값(예시) 설명 IP_ADDR session.getAttribute("IP_ADDR")
<%=IP_ADDR$%>:VS_IP_ADDR$ Matrix.GetUserInfo().IPAddress
192.168.xxx.xxx 접속 아이피 USER_CODE session.getAttribute("USER_CODE")
<%=USER_CODE$%>:VS_USER_CODE$ Matrix.GetUserInfo().UserCode
matrix 사용자 코드 USER_NAME session.getAttribute("USER_NAME")
<%=USER_NAME$%>:VS_USER_NAME$ Matrix.GetUserInfo().UserName
매트릭스 사용자명 ORG_CODE session.getAttribute("ORG_CODE")
<%=ORG_CODE$%>:VS_ORG_CODE$ Matrix.GetUserInfo().DeptCode B060000 사용자 부서 코드 ORG_NAME session.getAttribute("ORG_NAME")
<%=ORG_NAME$%>:VS_ORG_NAME$ - 전사 사용자 부서명 DeptCode session.getAttribute("DeptCode")
<%=DeptCode$%>:VS_DeptCode$ Matrix.GetUserInfo().DeptPath
'B060000',DEFAULT,-1 사용자 부서 경로 정보 USER_DEPT_PATH session.getAttribute("USER_DEPT_PATH")
<%=USER_DEPT_PATH$%>:VS_USER_DEPT_PATH$ -
|B060000|DEFAULT|-1 사용자 부서 경로 정보 USER_ROLE session.getAttribute("USER_ROLE")
<%=USER_ROLE$%>:VS_USER_ROLE$ Matrix.GetUserInfo().UserRole
SU;3;V0;SV;ST;M0;1; 사용자 권한 그룹 LANG_CODE session.getAttribute("LANG_CODE")
<%=DeptCode$%>:VS_LANG_CODE$ Matrix.GetUserInfo().LangCode
ko 다국어 언어 코드
(Admin 내 PORTAL 설정에서 선택한 다국어 코드 값)
LANG_IDX session.getAttribute("LANG_IDX")
<%=DeptCode$%>:VS_LANG_IDX$ - 1 다국어 언어 컬럼 인덱스
(MTX_LANG 테이블 > LANG_NAME_COLUMN 데이터의 'COMMENTS' 뒤에 붙은 숫자값)
SQL Injection 공격 회피 방법 (Dynamic SQL)
- AUD Platform Dynamic SQL
https://audp.bimatrix.co.kr/display/rndmanual/%5Bi-AUD%5D+AUD+Platform+Dynamic+SQL - AUD Platform Dynamic 공통 함수
https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=92078261
- AUD Platform Dynamic SQL
개요
내용 도구







