ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [논문리뷰]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.edu

    CheolWon 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방법을 찾아냄.

     

Designed by Tistory.