다음을 통해 공유


GitHub Copilot 현대화를 통해 평가 적용 범위 이해

이 문서는 GitHub Copilot의 현대화 기능 중 앱 평가 기능이 감지할 수 있는 것을 설명합니다. 평가는 다음 두 가지 주요 기능을 다룹니다.

  • 현대화 여정에 중요한 세 가지 도메인에서 문제 검색:

    • 클라우드 준비 상태: 파일 시스템 사용, 자격 증명 관리, 메시징 서비스, 데이터베이스 연결, 컨테이너화 간격, 세션 처리, 원격 통신 패턴 등을 포함하여 16가지 범주의 문제를 식별합니다.
    • Java 업그레이드: 오래된 Java 버전, OSS 지원 종료 프레임워크(Spring Boot, Spring Cloud, Jakarta EE), 수백 개의 제거되거나 사용되지 않는 API 및 Ant와 같은 레거시 빌드 도구에 플래그를 지정합니다.
    • 보안: 삽입 취약성(SQL, LDAP, XPath, OS 명령), 하드 코딩된 자격 증명 및 암호화 키, 동기화 문제, 리소스 수명 주기 문제 및 기타 영향을 많이 미치는 CWU를 포함하는 ISO/IEC 5055 표준에서 가져온 42가지 보안 약점을 검색합니다.
  • 애플리케이션 이해: 레거시 코드베이스의 경우 평가는 사용 중인 종속성과 기술을 표시하므로 마이그레이션을 시작하기 전에 애플리케이션이 무엇을 사용하는지 명확하게 파악할 수 있습니다.

다음 섹션에서는 각 도메인에 대한 문제 적용 범위를 자세히 설명합니다.

도메인: 클라우드 준비 상태

도메인 카테고리 검색 요약 중요한 이유
cloud-readiness credential-migration 하드 코딩된 AWS 자격 증명(aws_access_key_id, aws_secret_access_key), AWS 비밀 관리자 사용량 및 Spring Cloud Vault와 같은 포함된 비밀 관리 라이브러리를 검색합니다. 보안: 하드 코딩된 자격 증명 및 공급업체별 비밀 저장소는 매우 취약합니다. 클라우드 네이티브 애플리케이션은 자격 증명 도난을 방지하기 위해 중앙 집중식 ID 기반 보안이 필요합니다.
cloud-readiness region-configuration 코드 또는 구성 파일에서 하드 코딩된 AWS 지역 식별자(aws.region, AWS_REGION)를 식별합니다. 이식성: 하드코딩 지역은 애플리케이션을 특정 공급업체의 물리적 인프라와 연결하여 글로벌 배포 및 복원력을 저해합니다.
cloud-readiness storage-migration AWS S3 SDK 사용량(버킷, 개체, 미리 서명된 URL), S3 TransferManager 및 Google Cloud Storage 클라이언트 라이브러리를 검색합니다. 안정성 및 맞춤: 이러한 종속성은 공급업체의 개체 스토리지에 잠기며 대상 플랫폼의 네이티브 스토리지 서비스에서 작동하지 않습니다.
cloud-readiness messaging-service-migration Amazon SQS/SNS, Kafka, RabbitMQ(AMQP), ActiveMQ(Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar 및 Google Cloud Pub/Sub에 대한 종속성 및 연결 문자열에 플래그를 지정합니다. 확장성 및 안정성: 레거시 메시징 브로커는 클라우드 환경에서 수평 크기 조정 및 고가용성을 저해하는 고정 엔드포인트 및 디스크 기반 지속성을 사용하는 경우가 많습니다.
cloud-readiness database-migration MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore 및 Google Cloud Spanner에 대한 연결 문자열, 드라이버 및 시간 제한 설정을 검색합니다. 신뢰성: 자체 관리형 또는 네이티브가 아닌 데이터베이스에는 자동화된 클라우드 크기 조정이 부족합니다. 하드 코딩된 시간 제한 및 고정 재시도 간격으로 인해 부분 중단 시 차단 및 "다시 시도 폭풍"이 발생할 수 있습니다.
cloud-readiness file-system-management 로컬 스토리지 액세스에 대한 상대/절대 경로, 홈 경로(/home/), file:// 스키마 및 표준 Java IO/NIO 또는 Apache Commons IO 호출의 사용을 식별합니다. 무 국적: 클라우드 컨테이너는 임시 컨테이너입니다. 로컬 파일 시스템에 쓰면 인스턴스가 다시 시작되거나 크기 조정 작업이 수행될 때 데이터가 손실됩니다. 영구 데이터는 외부화되어야 합니다.
cloud-readiness local-credential 속성 또는 XML 파일에서 Java KeyStore(.jks) 파일, KeyStore.load 메서드 호출 및 텍스트 암호 지우기(password, pwd)에 플래그를 지정합니다. 보안 위험: 권한이 없는 개인이 애플리케이션 환경 또는 구성 파일에 액세스하는 경우 명확한 텍스트 또는 로컬 파일에 저장된 중요한 자료는 쉽게 손상될 수 있습니다.
cloud-readiness configuration-management 애플리케이션 설정을 위한 System.getenv, System.getProperty 외부 .properties/.xml/.ini 파일 및 Windows 레지스트리 액세스를 검색합니다. Externalization: OS별 스토리지 또는 로컬 파일은 대규모로 관리할 수 없으며 모든 인스턴스에서 코드를 변경하지 않고는 동적으로 업데이트할 수 없습니다.
cloud-readiness session-management 개체의 HttpSession 데이터 스토리지를 식별하고 웹 설명자에서 "배포 가능" 태그를 사용합니다. 확장성: 표준 HTTP 세션은 클라우드 크기 조정에 적합하지 않습니다. 인스턴스 간에 트래픽이 이동하는 동안 데이터 손실을 방지하려면 분산 캐시에 상태를 외부화해야 합니다.
cloud-readiness remote-communication 긴밀하게 결합된 프로토콜(CORBA, RMI, JCA), 보안되지 않은 HTTP/FTP 프로토콜, Java Mail API, 직접 소켓/NIO 채널 사용 및 하드 코딩된 URL을 검색합니다. 클라우드 호환성 및 보안: 긴밀하게 결합된 상호 작용은 확장성을 저해합니다. 보안되지 않은 프로토콜 및 하드 코딩된 URL은 동적 클라우드 네트워크 환경에서 취약하고 취약합니다.
cloud-readiness jakarta-migration JBoss EAP, WebLogic 또는 WebSphere에서 NoSQL, JPA, Data, WebSocket 및 JAX-RS 및 서버별 아티팩트용 Jakarta/Java EE 특정 API의 사용을 검색합니다. 지원 가능성: 클라우드 네이티브 런타임으로 마이그레이션하려면 최신 Jakarta 네임스페이스에 맞게 조정하고 독점적인 애플리케이션 서버 종속성을 제거하여 이식성을 보장해야 합니다.
cloud-readiness containerization Dockerfile이 없거나 문제가 있는 Dockerfile 명령(예: apt-get upgrade소문자 구문 및 구문 간격 문제)에 플래그를 지정합니다. 신뢰성: 컨테이너 빌드의 표준화는 안정적이고 재현 가능한 배포를 위해 필요하며 이미지가 다양한 환경에서 예측 가능하게 동작하도록 보장해야 합니다.
cloud-readiness scheduled-job-migration AWS 람다 처리기, Google Cloud Functions, Quartz Scheduler 종속성 및 Spring Batch 처리 워크플로를 식별합니다. 클라우드 컴퓨팅 맞춤: 대상 클라우드의 이벤트 기반 및 서버리스 컴퓨팅 모델을 사용하여 인프라 오버헤드를 줄이려면 예약된 작업 및 서버리스 함수를 리팩터링해야 합니다.
cloud-readiness apm-migration New Relic, Elastic APM 및 Dynatrace에 대한 포함된 APM 에이전트 및 라이브러리를 식별합니다. 관찰 가능성: 이러한 도구를 사용하려면 관리되는 환경에서 원격 분석, 대기 시간 및 상태 데이터를 제대로 캡처하려면 특정 클라우드 플랫폼 통합이 필요합니다.
cloud-readiness auth-migration SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, LDAP 사용량 및 레거시 웹 폼 인증 패턴을 검색합니다. 최신 ID: 레거시 웹 폼 및 LDAP 인증에는 최신 클레임 기반 클라우드 ID 공급자의 MFA, SSO(유연성 및 보안 기능)가 부족합니다.
cloud-readiness os-compatibility Windows 관련 Dynamic-Link 라이브러리(.dll 파일)에 대한 프로젝트 종속성을 식별합니다. 이식성: DLL은 OS에 따라 다르며 표준 Linux 기반 클라우드 컨테이너 환경에서 실행되지 않습니다. 플랫폼 간 공유 라이브러리로 대체해야 합니다.

도메인: java-upgrade

도메인 카테고리 검색 요약 중요한 이유
java-upgrade java-version-upgrade 비 LTS Java 버전(9, 10, 12-16, 19, 20) 및 레거시 버전(1.x~8 및 11)의 사용을 식별합니다. 보안 및 지원: 이전 및 비 LTS 버전에는 알려진 취약성이 포함되어 있으며 장기 유지 관리 업데이트가 부족하여 인프라가 공격에 노출됩니다.
java-upgrade framework-upgrade OSS 지원이 종료된 Spring Boot, Spring Cloud, Spring Framework 및 Jakarta EE 버전을 검색합니다. 지원 가능성: 오래된 프레임워크는 보안 수정 수신을 중지하여 애플리케이션을 보안 위험으로 만들고 최신 클라우드 네이티브 도구와 호환되지 않습니다.
java-upgrade deprecated-apis JBoss, Seam 2, WebLogic 및 WebSphere에서 제거되거나 사용되지 않는 수백 개의 API를 메서드 sun.misc.BASE64, Thread.stop, SecurityManager 및 독점 후크를 포함하여 카탈로그화합니다. 안정성 및 이식성: 제거된 API를 사용하면 최신 JVM에서 런타임 충돌이 발생합니다. 독점 공급업체 후크(예: WebLogic/JBoss 내부)는 표준 런타임 환경 간에 애플리케이션을 포터블하게 만드는 것을 방해합니다.
java-upgrade build-tool Ant() 또는 Eclipse 관련 프로젝트 구성(build.xmlWTP/JEM 특성)과 같은 레거시 빌드 시스템을 식별합니다. 자동화: 레거시 도구에는 최신 CI/CD 파이프라인에 효율적으로 통합하는 데 필요한 표준 규칙 및 종속성 관리가 부족합니다.

도메인: 보안(ISO 5055 안내)

ISO/IEC 5055 는 보안, 안정성, 성능 효율성 및 유지 관리의 네 가지 중요 요인에 따라 소프트웨어 제품의 내부 구조를 측정하기 위한 ISO 표준입니다. 이러한 요인은 소프트웨어 시스템이 얼마나 신뢰할 수 있고 신뢰할 수 있고 복원력이 있는지를 결정합니다. 본질적으로 ISO 5055는 "90개의% 프로덕션 문제를 일으키는 8개의 결함% 찾아서 방지"하기 위한 것입니다. ISO 5055는 안정성, 성능 효율성, 보안 및 유지 관리 기능의 각 품질 특성에서 가장 중요하고 영향력 있는 CWU를 식별합니다. GitHub Copilot 현대화의 경우 다음 표와 같이 ISO 5055에 정의된 보안을 기반으로 큐레이팅된 CWE에 대해 탐지합니다.

CWE_ID Title 설명
CWE-22 제한된 디렉터리에 대한 경로 이름의 부적절한 제한('경로 순회') 제품은 외부 입력을 사용하여 제한된 부모 디렉터리 아래에 있는 파일 또는 디렉터리를 식별하기 위한 경로 이름을 생성합니다. 그러나 경로 이름이 제한된 디렉터리 외부에서 확인되도록 할 수 있는 특수 요소를 적절히 무효화하지 않습니다.
CWE-23 상대 경로 순회 이 제품은 외부 입력을 사용하여 제한된 디렉터리 내에서 경로 이름을 생성하지만 해당 디렉터리 외부에서 확인할 수 있는 같은 ..시퀀스를 중화하지 못합니다.
CWE-36 절대 경로 통과 이 제품은 외부 입력을 사용하여 제한된 디렉터리 내에서 경로 이름을 생성하지만 해당 디렉터리 외부에서 확인할 수 있는 것과 같은 /abs/path절대 경로 시퀀스를 중화하지 못합니다.
CWE-77 명령에 사용되는 특수 요소의 부적절한 중화('명령 삽입') 이 제품은 외부의 영향을 받는 입력을 사용하여 명령을 생성하지만 다운스트림 구성 요소로 전송된 의도된 명령을 수정할 수 있는 특수 요소를 중화하지는 않습니다.
CWE-78 운영 체제 명령에서 사용되는 특수 요소의 부적절한 중화 ('운영 체제 명령 주입') 이 제품은 외부의 영향을 받는 입력을 사용하여 OS 명령을 생성하지만 다운스트림 구성 요소로 전송된 의도된 OS 명령을 수정할 수 있는 특수 요소를 중화하지 못합니다.
CWE-88 명령에서 인수 구분 기호의 부적절한 중립화('인수 삽입') 제품은 별도의 구성 요소에 대한 명령 문자열을 생성하지만 해당 문자열 내에서 인수, 옵션 또는 스위치를 제대로 구분하지는 않습니다.
CWE-79 웹 페이지 생성 중 잘못된 입력 중화('사이트 간 스크립팅') 제품이 다른 사용자에게 제공되는 웹 페이지로 사용되는 출력에 배치하기 전에 사용자가 제어할 수 있는 입력을 중화하지 못합니다.
CWE-89 SQL 명령에 사용되는 특수 요소의 부적절한 중화('SQL 삽입') 이 제품은 외부의 영향을 받는 입력을 사용하여 SQL 명령을 생성하지만 명령을 수정할 수 있는 요소를 중화하지 못하여 입력을 일반 데이터 대신 SQL 구문으로 해석할 수 있습니다.
CWE-564 SQL 삽입: 하이버네이트 Hibernate를 사용하여 사용자 제어 입력으로 빌드된 동적 SQL 문을 실행하면 공격자가 문의 의미를 수정하거나 임의의 SQL 명령을 실행할 수 있습니다.
CWE-90 LDAP 쿼리에서 사용되는 특수 요소의 부적절한 처리('LDAP 인젝션') 이 제품은 외부에 영향을 받은 입력을 사용하여 LDAP 쿼리를 생성하지만 다운스트림 구성 요소로 전송된 의도된 쿼리를 수정할 수 있는 요소를 중화하지 못합니다.
CWE-91 XML 삽입(블라인드 XPath 삽입이라고도 함) 제품은 XML에 사용되는 특수 요소를 제대로 중화하지 않으므로 공격자가 처리하기 전에 구문, 콘텐츠 또는 명령을 수정할 수 있습니다.
CWE-99 리소스 식별자의 부적절한 제어('리소스 주입') 제품은 입력을 수신하지만 의도한 제어 영역 외부의 리소스에 대한 식별자로 사용하기 전에 입력을 올바르게 제한하지 않습니다.
CWE-130 길이 매개 변수 불일치의 부적절한 처리 이 제품은 서식이 지정된 메시지 또는 구조를 구문 분석하지만 연결된 데이터의 실제 길이와 일치하지 않는 길이 필드를 잘못 처리합니다.
CWE-259 하드 코딩된 암호 사용 제품에는 자체 인바운드 인증 또는 외부 구성 요소에 대한 아웃바운드 통신에 사용되는 하드 코딩된 암호가 포함되어 있습니다.
CWE-321 하드 코딩된 암호화 키 사용 이 제품은 하드 코딩된 변경되지 않는 암호화 키를 사용합니다.
CWE-434 위험한 형식의 파일 무제한 업로드 이 제품을 사용하면 해당 환경 내에서 자동으로 처리되는 위험한 파일 형식을 업로드할 수 있습니다.
CWE-456 변수 초기화 누락 제품은 중요한 변수를 초기화하지 않으므로 실행 환경에서 예기치 않은 값을 사용합니다.
CWE-457 초기화되지 않은 변수 사용 이 코드는 초기화되지 않은 변수를 사용하므로 예측할 수 없거나 의도하지 않은 결과가 발생합니다.
CWE-477 사용되지 않는 함수 사용 이 코드는 사용되지 않거나 사용되지 않는 함수를 사용하며, 이는 적극적으로 검토되거나 유지 관리되지 않음을 시사합니다.
CWE-502 신뢰할 수 없는 데이터의 역직렬화 제품은 결과 데이터가 유효한지 충분히 확인하지 않고 신뢰할 수 없는 데이터를 역직렬화합니다.
CWE-543 다중 스레드 컨텍스트에서 동기화 없이 싱글톤 패턴 사용 제품은 적절한 동기화 없이 다중 스레드 환경 내에서 리소스를 만들 때 싱글톤 패턴을 사용합니다.
CWE-567 다중 스레드 컨텍스트에서 공유 데이터에 대한 동기화되지 않은 액세스 제품이 스레드 간에 정적 변수와 같은 공유 데이터를 제대로 동기화하지 못하여 정의되지 않은 동작이 발생합니다.
CWE-570 표현식이 항상 거짓입니다. 제품에는 항상 거짓으로 평가되는 표현이 포함되어 있습니다.
CWE-571 표현식이 항상 참입니다. 제품에는 항상 true로 평가되는 논리식이 포함되어 있습니다.
CWE-606 루프 조건에 대한 선택되지 않은 입력 이 제품은 루프 조건에 사용되는 입력을 제대로 확인하지 않으므로 과도한 루프로 인한 서비스 거부가 발생할 수 있습니다.
CWE-643 XPath 식 내 데이터의 부적절한 중립화('XPath 삽입') 이 제품은 외부 입력을 사용하여 XML 데이터베이스에 대한 XPath 식을 동적으로 생성하지만 해당 입력을 중화하지 못합니다.
CWE-652 XQuery 식 내 데이터의 부적절한 중립화('XQuery 삽입') 제품은 외부 입력을 사용하여 XQuery 식을 동적으로 생성하지만 해당 입력을 올바르게 중화하지 못합니다.
CWE-662 부적절한 동기화 이 제품을 사용하면 적절한 동기화 없이 여러 스레드 또는 시스템이 공유 리소스에 액세스할 수 있으므로 동시 액세스 문제가 발생할 수 있습니다.
CWE-665 부적절한 초기화 제품이 리소스를 초기화하거나 잘못 초기화하지 않으므로 액세스할 때 예기치 않은 상태로 남을 수 있습니다.
CWE-667 부적절한 잠금 제품이 리소스에 대한 잠금을 제대로 획득하거나 해제하지 않아 예기치 않은 상태가 변경됩니다.
CWE-672 만료 또는 릴리스 후 리소스에 대한 작업 제품이 만료되거나 릴리스되었거나 해지된 후 리소스에 액세스하거나 작동합니다.
CWE-681 숫자 형식 간의 잘못된 변환 데이터를 생략하거나 형식 변환 중에 예기치 않은 값으로 변환할 수 있으며, 중요한 컨텍스트에서 사용되는 경우 위험할 수 있습니다.
CWE-682 잘못된 계산 제품은 나중에 보안에 중요한 의사 결정 또는 리소스 관리에 사용되는 잘못된 결과를 생성하는 계산을 수행합니다.
CWE-732 중요한 리소스에 대한 잘못된 권한 할당 보안에 중요한 리소스에 대한 권한은 의도하지 않은 행위자가 읽거나 수정할 수 있는 방식으로 지정됩니다.
CWE-772 유효 수명 후 리소스 릴리스 누락 이 제품은 유효 수명이 종료된 후 리소스를 해제하지 않으며 더 이상 필요하지 않습니다.
CWE-775 파일 설명자 또는 핸들의 유효 수명 종료 후 릴리스 누락 불필요하게 된 후 제품이 파일 설명자 또는 핸들을 해제하지 않습니다.
CWE-778 로깅 부족 제품이 보안에 중요한 이벤트를 기록하지 못하거나 로깅할 때 중요한 세부 정보를 생략합니다.
CWE-783 연산자 우선 순위 논리 오류 연산자 우선 순위로 인해 잘못된 논리를 사용하는 식입니다.
CWE-789 과도한 크기 값을 가진 메모리 할당 제품은 예상된 한도 내에 있는지 확인하지 않고 신뢰할 수 없는 큰 크기 값을 기반으로 메모리를 할당합니다.
CWE-798 하드 코딩된 자격 증명 사용 제품에는 암호 또는 암호화 키와 같은 하드 코딩된 자격 증명이 포함되어 있습니다.
CWE-820 동기화 누락 제품은 액세스를 동기화하지 않고 공유 리소스를 동시에 활용합니다.
CWE-821 잘못된 동기화 제품은 공유 리소스를 동시에 활용하지만 액세스를 올바르게 동기화하지는 않습니다.
CWE-835 연결할 수 없는 종료 조건이 있는 루프('무한 루프') 제품에는 도달할 수 없는 종료 조건이 있는 반복 또는 루프가 포함되어 있습니다.
CWE-611 XML 외부 엔터티 참조의 부적절한 제한 제품은 의도한 제어 영역 외부에서 확인되는 URI가 있는 엔터티가 포함된 XML 문서를 처리합니다.
CWE-1057 예상 데이터 관리자 구성 요소 외부의 데이터 액세스 작업 이 제품은 디자인에 필요한 전용 중앙 데이터 관리자 구성 요소를 우회하는 데이터 액세스 작업을 수행합니다.

다음 단계