
머신러닝을 위한 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로 참조), 그리고 적대적 이미지의 기반이 되는 실제 테스트 데이터와 레이블입니다.
구성(Config)
애플리케이션 구성.
유틸리티(Utils)
다른 곳에 속하지 않는 기타 유틸리티입니다. 데이터 읽기, Tensorflow 큐 입력 처리 등을 위한 도우미 함수를 포함합니다.
애플리케이션과 관련된 리소스 디렉터리는 다음과 같습니다.
체크포인트(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에 추가하는 것을 잊지 마세요.이 프로젝트에 직간접적으로 기여하고 이 프레임워크에 영감을 준 많은 기계 학습 및 보안 연구자들의 인상적인 작업이 있습니다. 다음은 어떤 식으로든 사용되거나 참조된 리소스의 불완전한 목록입니다.