이 섹션에는 소스 코드 외부에 있지만 제작 중인 제품의 보안에는 여전히 중요한 내용이 모두 포함되어 있습니다. 이 섹션에서 다루는 문제들은 소스 코드와 직접적으로 관련이 없기 때문에 나머지 섹션과 분리했습니다.
<get>
작업을 사용하여 Ant 대상의 외부 종속성을 지정합니다. 이 방법은 개발자가 각 외부 dependency를 소프트웨어 프로젝트에 포함된 아티팩트로 문서화하는 경우와 기능적으로는 동일하지만, 빌드가 수행되면 종속성의 검색 및 결합이 자동화되므로 더욱 바람직합니다.
<get src="http://people.apache.org/repo/m2-snapshot-repository/org/apache/openejb/openejb-jee/3.0.0-SNAPSHOT/openejb-jee-3.0.0-SNAPSHOT.jar"
dest="${maven.repo.local}/org/apache/openejb/openejb-jee/3.0.0-SNAPSHOT/openejb-jee-3.0.0-SNAPSHOT.jar"
usetimestamp="true" ignoreerrors="true"/>
<dependencies>
<dependency org="javax.servlet"
name="servletapi"
rev="2.3" conf="build->*"/>
<dependency org="javax.jms"
name="jms"
rev="1.1" conf="build->*"/> ...
</dependencies>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
</dependency>
...
</dependencies>
Configure::write('debug', 3);
Configure::write()
메서드에 대한 두 번째 매개 변수는 디버그 레벨을 나타냅니다. 숫자가 높을수록 로그 메시지가 더 자세히 표시됩니다.low
세션 보안으로 구성된 CakePHP를 보여줍니다.
Configure::write('Security.level', 'low');
Session.timeout
설정과 함께 Security.level
설정은 세션의 유효 기간을 정의합니다. 실제 세션 시간 초과 값은 Session.timeout
에 다음 곱셈 중 하나를 곱한 값과 같습니다.ActionForms
를 사용하는 Struts 1 응용 프로그램은 ClassLoader Manipulation에 취약합니다.
const dns = require('dns');
// User-controlled input for DNS servers
const customDnsServers = from_user_controlled_input;
// Set custom DNS servers
dns.setServers(customDnsServers);
customDnsServers
변수에 할당됩니다. 그런 다음 이 입력은 dns.setServers(customDnsServers)
를 사용하여 DNS 서버를 설정하는 데 사용됩니다. 공격자가 악성 DNS 서버 주소를 제공하는 경우 응용 프로그램이 공격자의 서버를 사용하여 도메인 이름을 확인하도록 지시할 수 있으며, 이로 인해 잘못된 IP 주소가 반환될 수 있습니다.Dockerfile
에 USER
가 지정되어 있지 않으면 Docker 컨테이너는 기본적으로 슈퍼 사용자 권한으로 실행됩니다. 이러한 슈퍼 사용자 권한은 컨테이너 안에서 실행 중인 코드로 전파되며 필요 이상으로 많은 권한을 제공합니다. 슈퍼 사용자 권한으로 Docker 컨테이너를 실행하면 공격 표면이 확장되어 공격자가 더 심각한 형태의 악용을 감행할 수 있습니다.latest
태그는 이미지의 버전을 제공하기 위한 다이제스트 또는 고유 태그를 사용하지 않고 이미지의 버전 수준을 자동으로 나타냅니다. Docker는 최신 이미지 매니페스트 파일을 가리키는 메커니즘으로 latest
태그를 자동으로 할당합니다. 태그는 변경이 가능하기 때문에 공격자는 latest
(또는 imagename-lst, imagename-last, myimage
와 같은 약한 태그)를 사용하여 이미지 또는 계층을 바꿀 수 있습니다.ubuntu
의 최신 버전을 사용하는 기본 이미지를 선택하도록 지시합니다.
FROM ubuntu:Latest
...
zypper
에 지정된 패키지의 최신 버전을 검색하도록 지시합니다.
...
zypper install package
...
Example 2
에서 리포지토리가 손상된 경우 공격자는 동적 기준을 충족하는 버전을 업로드하고 zypper
로 하여금 종속성의 악성 버전을 다운로드하도록 할 수 있습니다.ADD/COPY
명령을 사용하여 추가되는 경우 공격자는 각 Docker 계층을 재생성하여 정보를 얻을 수 있습니다.Volumes
를 사용하는 경우에도 중요한 디렉터리가 노출될 수 있습니다. Volumes
를 사용하여 데이터를 유지해야 하는 경우 중요한 디렉터리를 탑재하지 마십시오.예제 2: 다음 ASPX 코드는 Microsoft Ajax CDN에 대한 모든 ASP.NET 프레임워크 스크립트 요청의 자동 리디렉션을 활성화합니다.
...
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js" type="text/javascript"></script>
...
...
<asp:ScriptManager
ID="ScriptManager1"
EnableCdn="true"
Runat="Server" />
...
Example 2
에서 ScriptManager
제어는 해당 ASPX 페이지를 구성하여 적절한 CDN에 대한 임의의 스크립트 요청을 자동으로 리디렉션합니다.services-config.xml
설명 파일이 “Logging” XML 요소를 지정하여 로깅의 다양한 부분을 설명합니다. 다음과 같습니다.
<logging>
<target class="flex.messaging.log.ConsoleTarget" level="Debug">
<properties>
<prefix>[BlazeDS]</prefix>
<includeDate>false</includeDate>
<includeTime>false</includeTime>
<includeLevel>false</includeLevel>
<includeCategory>false</includeCategory>
</properties>
<filters>
<pattern>Endpoint.*</pattern>
<pattern>Service.*</pattern>
<pattern>Configuration</pattern>
</filters>
</target>
</logging>
target
태그는 level
라는 옵션 속성을 갖습니다. 이는 로그 레벨을 나타냅니다. 디버그 수준이 너무 자세한 수준으로 설정되어 있으면 응용 프로그램에서 민감한 데이터를 로그 파일에 쓸 수 있습니다.allUsers
및 allAuthenticatedUsers
과 같은 특수 보안 주체 유형에 액세스 권한 또는 BigQuery 역할을 부여하면 누구나 민감한 데이터에 액세스할 수 있게 됩니다.