
머신러닝을 위한 Metasploit.
현재 상태의 deep-pwning은 성숙이나 완성에 절대 가깝지 않습니다. 이는 여러분이 실험하고 확장하고 발전시킬 수 있는 도구입니다. 그래야만 비로소 이 도구가 진정한 __통계적 기계 학습 모델을 위한 침투 테스트 도구 모음__이 될 수 있습니다.
연구자들은 기계 학습 모델(분류기, 군집기, 회귀기 등)을 객관적으로 잘못된 결정을 내리도록 속이는 것이 놀라울 정도로 간단하다는 것을 발견했습니다. 이 연구 분야를 적대적 기계 학습(Adversarial Machine Learning)이라고 합니다. 충분한 정보와 시간이 주어지면 동기화된 공격자가 어떤 기계 학습 시스템도 우회할 수 있다고 주장하는 것은 과장이 아닙니다. 그러나 이 문제는 아키텍트와 엔지니어가 기계 학습 시스템을 설계하고 구축할 때 종종 간과됩니다. 이러한 시스템이 의료, 운송, 금융 또는 보안 관련 분야와 같은 중요 시나리오에서 사용될 때 그 결과는 우려스럽습니다.
따라서 기계 학습을 사용하는 애플리케이션의 효율성을 평가할 때는 시스템의 정밀도와 재현율과 함께 적대적 설정에서의 가변성도 측정되어야 합니다.
이 도구는 2016년 8월 라스베이거스 DEF CON 24에서 Machine Duping 101: Pwning Deep Learning Systems라는 제목의 발표에서 공개되었습니다.
이 프레임워크는 Tensorflow 위에 구축되었으며, 이 저장소에 포함된 많은 예제는 Tensorflow GitHub 저장소에서 얻은 수정된 Tensorflow 예제입니다.
포함된 모든 예제와 코드는 심층 신경망을 구현하지만, 심층 신경망으로 구현되지 않은 유사한 작업의 분류기에 대한 적대적 이미지를 생성하는 데 사용할 수 있습니다. 이는 기계 학습에서 '전이성(transferability)' 현상 때문이며, Papernot 등이 이 논문에서 전문적으로 설명했습니다. 이는 DNN 모델 A로 제작된 적대적 샘플이 다른 구조의 DNN 모델 B뿐만 아니라 일부 SVM 모델 C까지 속일 수 있음을 의미합니다.
앞서 언급한 논문(Papernot 등)에서 가져온 이 그림은 소스 모델(적대적 샘플을 생성하는 데 사용됨)이 타겟 모델(적대적 샘플이 테스트되는 대상)에 대해 성공적으로 오분류한 비율을 보여줍니다.
Deep-pwning은 코드 중복을 최소화하기 위해 여러 구성 요소로 모듈화되었습니다. 잠재적 분류 작업의 특성이 매우 다르기 때문에 현재 코드 반복은 이미지와 구문(단어 벡터 사용)을 분류하는 데 최적화되어 있습니다.
다음은 Deep-pwning의 현재 반복을 구성하는 코드 모듈입니다.
드라이버(Drivers)
드라이버는 코드의 주 실행 지점입니다. 여기서 다른 모듈과 구성 요소를 연결하고 적대적 생성 프로세스에 더 많은 사용자 정의를 주입할 수 있습니다.
모델(Models)
실제 기계 학습 모델 구현이 위치하는 곳입니다. 예를 들어, 제공된 lenet5 모델 정의는 lenet5.py 내의 model() 함수에 있습니다. 네트워크를 다음과 같이 정의합니다.
-> 입력
-> 컨볼루션 레이어 1
-> 최대 풀링 레이어 1
-> 컨볼루션 레이어 2
-> 최대 풀링 레이어 2
-> 드롭아웃 레이어
-> 소프트맥스 레이어
-> 출력
적대적(Advgen)
이 모듈은 모델에 대한 적대적 출력을 생성하는 코드를 포함합니다. 각 advgen 클래스에 정의된 run() 함수는 Tensorflow에서 정의된 기계 학습 모델에 대한 여러 미리 정의된 텐서 연산을 포함하는 input_dict를 입력으로 받습니다. 적대적 샘플을 생성하는 모델이 알려진 경우 입력 사전의 변수는 해당 모델 정의를 기반으로 해야 합니다. 반면 모델을 알 수 없는 경우(블랙 박스 생성) 대체 모델을 사용/구현해야 하며, 해당 모델 정의를 사용해야 합니다. 전달해야 하는 변수는 입력 텐서 플레이스홀더 변수와 레이블(종종 x -> 입력 및 y_ -> 레이블로 참조), 모델 출력(종종 y_conv로 참조), 그리고 적대적 이미지의 기반이 되는 실제 테스트 데이터와 레이블입니다.
애플리케이션과 관련된 리소스 디렉터리는 다음과 같습니다.
체크포인트(Checkpoints)
Tensorflow를 사용하면 부분 훈련된 모델을 로드하여 훈련을 재개하거나, 완전히 훈련된 모델을 애플리케이션에 로드하여 평가 또는 다른 작업을 수행할 수 있습니다. 이러한 저장된 '체크포인트'는 모두 이 리소스 디렉터리에 저장됩니다.
데이터(Data)
이 디렉터리는 드라이버 애플리케이션이 입력으로 받는 모든 입력 데이터를 저장합니다.
출력(Output)
이것은 생성된 적대적 이미지를 포함한 모든 애플리케이션 출력의 출력 디렉터리입니다.
Tensorflow 설치 방법에 대한 지침은 https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html 에서 찾을 수 있으며, 설치할 Tensorflow 바이너리를 선택할 수 있습니다.
$ pip install -r requirements.txt
이전에 훈련된 체크포인트에서 복원하려면 (config/mnist.conf 설정)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
처음부터 훈련하려면 (설정에 지정된 폴더에 있는 이전 체크포인트는 덮어쓰여집니다)
$ cd dpwn
$ python mnist_driver.py
defense 모듈 추가sentiment driver에서 사전 훈련된 word2vec 모델 사용 지원 추가models에 SVM 및 로지스틱 회귀 지원 추가 (+ 이를 사용하는 예제 추가)dpwn은 Tensorflow 0.8.0이 필요합니다. Tensorflow 0.9.0은 몇 가지를 도입합니다.
(멋진 Requests 저장소 kennethreitz의 것을 빌려왔습니다)
AUTHORS.md에 추가하는 것을 잊지 마세요.이 프로젝트에 직간접적으로 기여하고 이 프레임워크에 영감을 준 많은 기계 학습 및 보안 연구자들의 인상적인 작업이 있습니다. 다음은 어떤 식으로든 사용되거나 참조된 리소스의 불완전한 목록입니다.
구성(Config)
애플리케이션 구성.
유틸리티(Utils)
다른 곳에 속하지 않는 기타 유틸리티입니다. 데이터 읽기, Tensorflow 큐 입력 처리 등을 위한 도우미 함수를 포함합니다.