페이지 트리
메타 데이터의 끝으로 건너뛰기
메타 데이터의 시작으로 이동

  1. Secure Coding (시큐어 코딩) 이란 무엇인가요?
    1. 보안 취약점을 최소화하면서 안전한 소프트웨어를 개발하는 코딩 기법

  2. SQL Injection 이란?
    1. 웹 어플리케이션에서 가장 흔하면서도 치명적인 보안 취약점으로
      이 공격으로 단순 정보 탈취에서 그치지 않고
      데이터 베이스 자체를 파괴할 수도 있어, 가장 주의해야 하는 보안 위협 입니다.


    2. SQL Injection 의 공격 원리

      1. SQL Injection의 핵심은 사용자의 입력값이 검증 없이 SQL 쿼리문과 조합되서 실행되는 것

    3. SQL Injection 예시

      1. MX-GRID, i-MATRIX에서 수식으로 조합 (SQL 검증 없이 단순 조합 됨)

      2. MATRIX VBA에서 SQL을 조합
        SQL Injection 위협 & 그냥 보안 위배 (vba를 사용자가 접근할 수 있음.)
        ※ VBA에서 SQL을 만든다는 것은 데이터 소스에서 그냥 SQL 조합 함이 예상됨.

      3. i-AUD의 데이터 소스에서 VN_?? 파라미터 오남용
      4. 조작 가능한 사용자 계정 정보를 사용 (세션 변수를 사용하지 않음.)


  3. SQL Injection 공격 회피 방법
    1. VN_파라미터는 숫자값외에는 사용 절대 금지

      1. VS_파라미터는 SQL 문자리터럴 ‘문자열값’ 형태로 자동 변경 되므로 문제가 되지 않음

      2. VN_파라미터는 하위 호환성으로 인해 해당 값의 타입을 점검하지 않고 쿼리 조합이 발생함.

    2. 쿼리 조합이 필요한 경우는 Dynamic SQL 활용

      1. 조건에 따른 쿼리 조합, 또는 파라미터 값의 유효성을 검사 가능

      2. 자주 쓰는 함수는 사전에 정의하여 재활용이 가능함.

    3. 인증 정보를 기반으로 하는 모든 작업은 세션 변수를 사용한다.

      1. Client(PC)에서 전송되는 데이터는 공격자에 의해서 변경될 수 있다.

      2. 네트워크 데이터 변조 및 브라우저의 개발자 기능으로 조작이 가능하다.

    4. SSL 적용 또는 통신 구간 암호화 옵션 적용

      1. 네트워크로 전송되는 데이터에 대한 암호화 적용하여 데이터 조작 방지
        ※ 브라우져의 개발자 도구 등을 활용하여 데이터 조작이 가능하므로 근본적인 해결책은 아님
        통신구간 암호화 설정
        : https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=78708798

    5. AUD 플랫폼에서 기본 제공하는 세션 변수

      1. 세션에 저장된 사용자 인증 관련 정보 목록
        https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=108396697

        이름(고정)

        i-AUD Server Script /

        Dynamic SQL 사용 서식

        SQL 사용 서식
        (i-META 조회 조건 값 서식)

        i-AUD JScript 사용시세션 변수 값(예시)설명
        IP_ADDRsession.getAttribute("IP_ADDR")
        <%=IP_ADDR$%>
        :VS_IP_ADDR$

        Matrix.GetUserInfo().IPAddress

        192.168.xxx.xxx접속 아이피
        USER_CODEsession.getAttribute("USER_CODE")
        <%=USER_CODE$%>
        :VS_USER_CODE$

        Matrix.GetUserInfo().UserCode

        matrix사용자 코드
        USER_NAMEsession.getAttribute("USER_NAME")
        <%=USER_NAME$%>
        :VS_USER_NAME$

        Matrix.GetUserInfo().UserName

        매트릭스사용자명
        ORG_CODEsession.getAttribute("ORG_CODE")
        <%=ORG_CODE$%>
        :VS_ORG_CODE$Matrix.GetUserInfo().DeptCodeB060000사용자 부서 코드
        ORG_NAMEsession.getAttribute("ORG_NAME")
        <%=ORG_NAME$%>
        :VS_ORG_NAME$-전사사용자 부서명
        DeptCodesession.getAttribute("DeptCode")
        <%=DeptCode$%>
        :VS_DeptCode$

        Matrix.GetUserInfo().DeptPath

        'B060000',DEFAULT,-1사용자 부서 경로 정보
        USER_DEPT_PATHsession.getAttribute("USER_DEPT_PATH")
        <%=USER_DEPT_PATH$%>
        :VS_USER_DEPT_PATH$

        -

        |B060000|DEFAULT|-1사용자 부서 경로 정보
        USER_ROLEsession.getAttribute("USER_ROLE")
        <%=USER_ROLE$%>
        :VS_USER_ROLE$

        Matrix.GetUserInfo().UserRole

        SU;3;V0;SV;ST;M0;1;사용자 권한 그룹
        LANG_CODEsession.getAttribute("LANG_CODE")
        <%=DeptCode$%>
        :VS_LANG_CODE$

        Matrix.GetUserInfo().LangCode

        ko

        다국어 언어 코드

        (Admin 내 PORTAL 설정에서 선택한 다국어 코드 값)

        LANG_IDXsession.getAttribute("LANG_IDX")
        <%=DeptCode$%>
        :VS_LANG_IDX$1다국어 언어 컬럼 인덱스
        (MTX_LANG 테이블 > LANG_NAME_COLUMN 데이터의 'COMMENTS' 뒤에 붙은 숫자값)
  4. SQL Injection 공격 회피 방법 (Dynamic SQL)

    1. AUD Platform Dynamic SQL
      https://audp.bimatrix.co.kr/display/rndmanual/%5Bi-AUD%5D+AUD+Platform+Dynamic+SQL
    2. AUD Platform Dynamic 공통 함수
      https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=92078261

  • 레이블 없음