-
[논문리뷰]DIP: Dead code Insertion based Black-box Attack for Programming Language Model논문리뷰 2024. 9. 6. 15:52
출처 : DIP: Dead code Insertion based Black-box Attack for Programming Language Model
ACL 2023
CheolWon Na, YunSeok Choi, Jee-Hyong Lee† Sungkyunkwan University
{ncw0034, ys.choi, john} @ skku.eduCheolWon Na ncw0034@skku.edu
Information & Intelligence Lab @ SKKU자연어학회: ACL, EMNLP, NAACL
딥러닝, 인공지능: ICML, ICLR, NIPS
이미지: CVPR
DIP: Dead code Insertion based Black-box Attack for Programming Language Model
Programming Language Model 에 대해 Dead code Insertion (데드코드삽입)방법으로
Black-box Attack(모델에 대해 정보를 알수없을때)
-> 모델을 속이려하는방법,
-> 은행어플에서 신분증을 올릴때 AI로 해서 검열을 통과시킬수 있음.
-> 유투브 썸네일 폭력적일때 차단일때 , 사람이 볼때 폭력적일때 검열을 통과하겠다.
-> 해킹방법
What is the adversarial attack ? 적대적 공격
원래이미지에 사람이 보기엔 괜찮은데 모델이 보기엔 혼란스럽게 하는것
모델은 결정경계를 학습한다.
데이터를 encoder를 통해서 representation vector화를 테스트해봄
이미지, 자연어, Programming language
아래그림)
1) 이미지 모델(비전모델) attack
노이즈를 추가하면 경계를 넘어가게하는 방법을 찾는다.
아래그림)
2) 자연어 모델 attack
자연어 데이터를 수정해서 자연어 모델을 속일수도있음.
adversarial attack (적대적공격)
Sadv = > sentence 에 대한 적대적 공격을 수행해서 변형한 대이터
Sadv = adversarial example = > 이미지지나 자연어나 적대적 공격을 수행해서 변형한 대이터3) programming representation
int를 넣고, 변수를 바꾸니 이 함수를 multiplication으로 모델 예측이 바뀜
아래그림)
목표
compile이 다 되야함 = minimizing perturbation
Sadv 가 Sentence랑 비슷해야하고
C (Sadv) 는 Sentence를 adversarial example를 Classification 한것이 y값(실제값)과 같지 않게 하는게 목적
compile 작성한 코드를 이진코드로 바꿔주는작업
기존의 자연어 공격방법을 그대로 가꾸올수 없음. compile이 되야하기 때문
minimizing perturbation(변형) - 변형을 조금만해야한다.
= 너무 많이 변형해서 코드의 변경된것을 알아차리지 않게한것아래그림) 일반적인 adversarial attack (적대적공격)을 위한 코드변형
변수명 변형
dead code 사용
statement Permutation 변수선언한거 순서변형
Loop Exchange 루프변형
Switch - to if switch를 if로 변형
Boolean Exchange
아래그림) 여기 논문에서 쓸 code transformation방법
Variable Renaming
Dead Code Insertion
아래그림) 여기 논문은 밑줄을 볼때 blackbox랑, non targeted attack으로 실험함
whitebox에서는 parameter에 접근이 가능하고,
blackbox에서는 parameter에 접근이 불가능함.
Goal (purpose of attack)
targeted attack : 특정한 output을 내도록 공격
non targeted attack : 정답이 안나오게만 하도록하는 공격
아래그림)
input source code -> adversarial code -> target model
정답이 안나오게만 하도록하는 공격으로, 정답이 안나오면 멈춤
아래그림)
1. find vulnerable position ---공격받을 코드의 취약부분 파악후 코드삽입위치 파악
2. dis-similar code --- 공격받을 source code(원래코드) 랑 비교해서
제일 비슷하지 않은 코드를 dataset에서 갖고옴
3. get a high attention line --- 제일 비슷하지않은 코드 - attention code에서 제일 높은 attention line을 고름
통째로 넣기는 perturbation이 많이 되서 high attention부분만 고른다.
3-1 source code의 취약부분에 넣음
4 바뀌어진 코드 - adversarial source code를 모델에 넣어보고 output이 동일한지 확인한다.
5. 틀릴때까지 반복 (제한선- 10번까지 등)
아래그림)
DIP : For the efficiency
Find Vulnerable Position
vocab 은
dataset의 x들에서 어떤단어는 몇번이고 .. 알려주는건데 사이즈를 줄여놓은것
훈련다끝난후 새로운 data들어올때 잘 예측하도록 학습시킴
unknown token이
새로운 token들어올때 처리하는 특수토큰
처음부터 unknown token이 vocab에 존재함
아래그림)
cls toekn 은
cls token을 넣으면 문장전체를 담는 vector를
바로 얻어낼수 있다.출처: bert논문
아래그림)
unknown token이 원래 vocab에 있는데,
[UNK] [UNK] [UNK] [UNK] 한줄을 코드에 넣어서
얼마나 변형되는지 확인
방향이 비슷하면 내적값이 크다.
cosine 크기가 크면 거리가 수직으로 내린점에서부터 멀다.
rc
(code의 벡터공간에 표현 representation) code data들을 어떤공간에 갖다놓은것 rc, rc' 각도가 비슷하면 비슷한코드1번위치에 unknwon 코드 넣은값이 : 0.9 rc rc1 의 cosine 과
2번위치에 unknwon 코드 넣은값이 : 0.7 rc rc2 의 cosine 구해서 rc2 비교값이 더 커서 rc1보다 많이 변형됬다.
3번
4번
5번
결론 : 삽입위치 찾음---공격할곳은 제일 많이 변형된곳이 취약부분이라서 거기에 코드를 삽입할예정
-> 공격할곳 = 많이 변형된곳 = 기존코드랑 비슷하지 않은코드
Search Dis-similar Cod
code database --> sampling K --> input source code --> calculate the distance of the representation of the [CLS] token
기존 코드에서 가장 멀리있는거로 공격해보고
안되면 다음식
반복
sampling한 코드 k개중
예를들어,
C1 C2 C3 C4 C5 를 sampling한후 V (코사인각도) 로 비슷하지 않은 순으로 아래처럼 정렬
C3 C2 C4 C1 C5 -> attention score 로 한줄을 뽑은다음
d3 d2 d4 d1 d5
input source code 에 순서대로 넣어본다
위치 1 4 2 3 --> 이 위치에 아래처럼 query = 몇번 넣어봤는지
1번에 d3넣고 안되면 d2 안되면 d4 안되면 d1 안되면 d5
2번
3번
4번
아래그림
--> ASR (Attack Success Rate) 떨어지면 ACR ( 공격성공코드수 / 공격받는 코드수)
--> Query -> 몇번 넣어봤는지 4 x 5 1,2,3,4 (위치) d1,d2,d3,d4,d5(attention)
code BLEU
측정지표: 공격후에 기존코드와 변형코드의 차이값
차이값이 클수록 원래코드가 변형이 덜되어서 좋은 코드
아래그림)
Query, Pert, CodeBlue 각각 측정
아래그림
pert비율이 낮을수록 변형덜됨
vulnerable position vs. dissimilar code
기존코드에서 삽입할거찾음 새로운 코드에서 넣을거 찾음
아래그림
새로운 코드에서 넣을거 찾은것에서 attention score로 한줄만 골라서 한줄을 기존코드에 넣는다.
똑같은 코드가 있을수 있어서 공격할 코드를 wrapper로 감싸준다.
아래그림 ) wrapper 예시 (다른논문)
아래그림
공격해서 안됬으면 다음코드로 반복
아래그림)
authorship attribution task - 66명 author 중 1명 맞춤
아래그림)
실험 세팅
아래그림
ASR : 공격성공코드수가 높으면 좋음
Query: 몇번넣어봤는지가 적으면 좋음
Pert: 변형이 덜되면 좋음
CodeBlue: 기존코드와 변형코드가 비슷할수록 좋음 = 높으면 높을수록 좋음
아래그림)
DIP(ours)가 이논문이 실행한것
9개의 상황(task, 공격받을 model) 에 대해 평균적으로 이논문 DIP(ours) 방법이 성능이 제일 좋았다.
아래그림
Ablation study - 요소를 하나씩 빼서 실험함
w/o Dissim : C1, C2, C3, C4, C5 --> sorting없이 랜덤하게 가져와서 공격함
w/o Position: 어느위치에 넣을지 랜덤하게 넣어봄
w/o Att-line: attention score없이 랜덤하게 C1이런 코드에서 갖고옴
--> 결론: 덜좋아짐
아래그림
CodeBERT, G.CodeBERT, CodeT5를 공격해서 얻은 C^adv를 다른 모델에도 넣어본다.
아래그림
Adversarial train
원래는 C1을 넣은 예측값과 정답인 y1를 비교하는건데
이제는 C1^adv를 넣은 예측값과 정답인 y1을 비교해서 학습을 추가적으로 함
아래그림
sample code k를 늘려봤을때 30정도까지만 효과가 있고 이상부터는 효과가 없다.
아래그림
결론
find vulnerable position
search dis-similar code
high-attention snippet extraction
을 해서 효율적이고 높은 성능의 adverserial attack방법을 찾아냄.
'논문리뷰' 카테고리의 다른 글
아주대 - GTA Gated Toxicity Avoidance for LM Performance Preservation 논문리뷰 (2) 2024.09.18 chapter01. n-gram 언어모델 (1) 2024.09.01 Distributed Representations of Words and Phrases and their Compositionality (Word2Vec) (1) 2024.08.30 cnn 논문리뷰 (0) 2024.07.30