
Letter dated 27 December 2001 from the Chairman of the Security Council Committee established pursuant to resolution 1373 ( 2001 ) concerning counter-terrorism addressed to the President of the Security Council The Counter-Terrorism Committee has received the attached report from the Sudan , submitted pursuant to paragraph 6 of resolution 1373 ( 2001 ) ( see annex ) . I should be grateful if you would arrange for this letter and its annex to be circulated as a document of the Security Council . ( Signed ) Jeremy Greenstock Chairman Counter-Terrorism Committee Annex [ Original : English ] Letter dated 27 December 2001 from the Permanent Representative of the Sudan to the United Nations addressed to the Chairman of the Security Council Committee established pursuant to resolution 1373 ( 2001 ) concerning counter-terrorism On instructions from my Government , I have the honour of enclosing a report from the Sudan to the Counter-Terrorism Committee pursuant to paragraph 6 of Security Council resolution 1373 ( 2001 ) . My Government stands ready to provide the Committee with further reports or information , as necessary or if requested to do so by the Committee . I should be grateful if you would have the text of the present letter and the enclosed report circulated as a document of the Security Council . ( Signed ) Elfatih Erwa Permanent Representative Enclosure [ Original : Arabic ] Report of the Government of the Sudan submitted pursuant to paragraph 6 of Security Council resolution 1373 ( 2001 ) The Government of the Sudan , in its absolute belief that terrorism is one of the gravest crimes threatening the security of communities and societies , seeking to instil fear in peaceful persons , commit aggression against them and destroy property , and that it also threatens international relations and endangers the security of States ; itself having been the victim of terrorism directed against it during the past few years ; and convinced of the need to enlist every lawful means in accordance with the Charter of the United Nations , international conventions and the resolutions and declarations of the United Nations General Assembly relating to terrorist acts that pose a threat to international peace and security and to strengthen international cooperation for that purpose , promptly and unequivocally condemned the terrorist acts committed in New York , Washington , D. C. , and Pennsylvania on 11 September 2001 , expressing its condolences to the Government and people of the United States of America and the families of the victims of every nationality . This included the following : A message from the President of the Republic addressed to the President of the United States of America on 11 September , expressing the Sudan 's condemnation of the heinous crimes committed against innocent civilians in the United States of America as well as the destruction of property , transmitting the condolences of the Government and people of the Sudan to the Government and people of the United States and the families of the victims and affirming the desire to cooperate with the United States and the international community in combating every form of terrorism . The President of the Republic expressed the same sentiments in his statements made at Khartoum Airport on returning from a visit to Saudi Arabia on 12 September 2001 ; The statement of the Minister for Foreign Affairs on 11 September , in which he described the terrorist attacks on the World Trade Center and the American Department of Defense ( the Pentagon ) as criminal terrorist acts , expressing his heartfelt condolences and reaffirming the readiness of the Government of the Sudan to cooperate with the Government of the United States and the international community in combating all terrorist acts and bringing the perpetrators to justice ; On 12 September the Minister for Foreign Affairs also sent a message to American Secretary of State Colin Powell in which he condemned the terrorist acts and offered his condolences , reaffirming the willingness of the Sudan to cooperate fully with the United States ; On 12 September , the Ministry of Foreign Affairs issued a statement along the same lines , emphasizing the Sudan 's rejection of all forms of violence and expressing condolences to the families of the victims and the hope that the events would not lead to an escalation of violence ; Immediately after the events , the Government of the Sudan also stepped up security procedures in the country for the protection of the American diplomatic mission and American nationals in the country ; On 17 September 2001 , the Minister for Foreign Affairs presented condolences to the American Government on behalf of the Government of the Sudan and signed the register of condolences at the American embassy in Khartoum , stating to journalists that a year earlier the Sudan had received an American security team to engage in bilateral cooperation in the area of the fight against international terrorism and to make sure that the Sudan had no connection with international terrorism . Implementation of Security Council resolution 1373 ( 2001 ) Measures taken to prevent and suppress the financing of terrorist acts In the area of legislation , the Sudan was one of the first countries to sign the 1999 International Convention for the Suppression of the Financing of Terrorism , which it did on 29 February 2000. The formalities are currently being completed for its ratification by the legislative authorities , whereupon it will become enforceable domestic law . Regarding the successive resolutions of the United Nations General Assembly on measures aimed at the elimination of international terrorism and the declarations issued by that body in 1994 and 1996 , especially in respect of the prevention and suppression of the financing of terrorism , the Sudan actively participated in the drafting of the related paragraphs . In particular , the Sudan proposed the addition of the following paragraph to General Assembly resolution 51/210 , of 1996 : “ [ Reiterates its ] call upon States to refrain from financing , encouraging , providing training for or otherwise supporting terrorist activities ” . Since that time , this paragraph has become a constant feature of General Assembly resolutions . The Sudan has been in the forefront in terms of awareness of the dangers of the financing of terrorist acts and the threat posed by those acts to the stability , security and peace of States . Its efforts in that area have been consistent and constant : when , for example , the Government of India proposed a draft comprehensive convention on international terrorism , the Sudan welcomed and supported that initiative but insisted on the inclusion of an explicit article criminalizing the financing of terrorist acts by individuals , groups and States , as can be seen from the minutes of the working group involved in the drafting of the draft convention . The Sudan has also signed the international Convention against Transnational Organized Crime , which contains provisions on the drying-up of the resources of such crime and the organizations responsible for it with respect to money-laundering and other practices , and the legislative formalities for its ratification are currently being completed . The Sudan has acceded to the Arab Convention for the Suppression of Terrorism , article 3 of which provides for an undertaking by States not to finance terrorist acts and which is considered an enforceable internal law of the State . The Sudan has promulgated the Terrorism ( Combating ) Act , 2000 , chapter IV of which deals with general provisions on the seizure of property and equipment used in terrorist offences , including the confiscation of real estate and other property , equipment , arms , means of conveyance or other things proved to have been used in committing or attempting to commit , or in facilitating or assisting in the commission of , terrorist offences or in concealing those who plot , perpetrate , instigate or encourage such offences , etc. , in addition to any other penalty imposed by the competent court . It also deals with the seizure of terrorists ' assets and of any property , real estate , equipment or funds owned by them and their deprivation of any benefit or utilization of any other resources , funds or property , whether in the Sudan or abroad ( Act annexed ) . The 1991 Banking Regulation Act granted the power to examine clients ' accounts and transactions to the central bank and its governor and also , for judicial purposes , to the Minister of Justice or the judges . The law also granted the central bank the authority to inspect , supervise and monitor banks . The central bank has an officer trained in following sensitive banking operations and in ascertaining their domestic and foreign sources . It is also possible to determine their bank sources , if they involve bank financing or deposits , and the sources of such deposits . The Government of the Sudan therefore deems the existing legislation on banking activity adequate to enable the authorities to trace and prevent the financing of terrorist acts and to dry up any funds , provided that they are in banks operating in the Sudan . The problem , however , also involves dealing with practical dangers : in the context of the rapid transformation taking place in the country towards a free market economy and the encouragement of a flow of foreign investments into the country , Sudanese banks , like other banks throughout the world , are confronted with the rapid , easy transfer of deposits and assets in the Sudan via the banking map , both into and out of the country . This has gone hand in hand with an increase in financial flows and is expected to involve greater risks of money-laundering operations that face emerging markets in a number of developing countries . A further problem relates to the difficulty of tracing the primary sources of deposits and withdrawals if they are not bank-related . Such a situation requires the enhancement of technical capacities , the availability of up-to-date equipment , close control of communications and the flow of information to the central bank and other competent authorities so as to enable them to perform their tasks efficiently . This naturally necessitates international technical cooperation and the provision of the necessary support to achieve it and “ to intensifythe exchange of information on facts related to terrorism ” . The latter passage , whose inclusion was proposed by the Sudan in coordination with other States , is taken from General Assembly resolutions adopted since 1996 on measures aimed at eliminating international terrorism . Steps have also been taken since 1996 to dry up the sources of financing of suspected groups and individuals through the closing and liquidation of companies and related commercial activities , such as the Hijra Construction and Wadi Al-`Aqiq companies , partly or wholly owned by Osama Bin Laden , and the Injaz company , suspected of being controlled by an Egyptian Islamic group . Offences and penalties relating to terrorist activities Sudanese law criminalizes terrorist acts . Indeed , chapter II of the Terrorism ( Combating ) Act , 2000 , contains provisions relating to terrorist offences , the direction of terrorism organizations and the criminalization of acts such as the hijacking of aircraft and means of sea , river or land conveyance ; the detention of or causing of injury to persons ; and environmental offences . Under this Act , the following are considered terrorist offences subject to the application of the Act even if perpetrated for political motives : murder ; theft accompanied by coercion against individuals , authorities or means of conveyance or communication ; acts of sabotage against public property or property earmarked for public use , even if owned in the Sudan by another State ; the crimes of manufacture , smuggling or possession of arms , munitions , explosives or other materials prepared for the commission of terrorist offences . The Act provides a number of penalties for terrorist offences , including the seizure and confiscation of money , property and equipment used in terrorist offences ; termination of residence and deportation , in the case of aliens ; punishments including imprisonment for a term of as much as 20 years or life , depending on the magnitude of the offence committed , a fine , or both ; and in some cases , execution ( see the annexed Terrorism ( Combating ) Act ) . The National Security Act of 1999 , as amended in 2001 , provides the death penalty or life imprisonment for any member who intentionally commits or refrains from an act for the purpose of imperilling the internal or exterior security of the country ( article 44 ) , and a penalty of imprisonment for a term no greater than 10 years or a fine or both for unlawfully having at one 's disposal , or permitting another to have at his disposal , any weapons , munitions or matériel . The Penal Code of 1991 criminalizes terrorism and terrorist organizations , inasmuch as article 65 of the Code provides that anyone who establishes or directs an organization that plans to commit any crime or anyone who wilfully participates in or assists such an organization , whether operative in the Sudan or outside , shall be punished by imprisonment . If the crime planned by the organization is that of waging war or looting or is an offence punishable by death , or terrorism involving a threat to the public or the public authority , the penalty shall be imprisonment for a term not exceeding 10 years and may also be punished by a fine . In addition , article 144 of the Code provides as follows : ( i ) The perpetrator of the crime of terrorism is one who : Addresses to any person a threat to harm him or to harm any other person important to him for the purpose of intimidating him or inducing him to do what he need not do according to law or not to do what he is permitted to do by law ; b. Makes a movement or exhibits readiness to act , intending thereby to use unlawful force or knowing that he is thus likely to make any person present believe that he is about to use such force against him ; ( ii ) The crime of terrorism shall be punishable by imprisonment for a term not exceeding six months or a fine or both . C. Legislation and procedures in force for freezing accounts and assets at banks The 1991 Banking Regulation Act , as amended , grants the central bank , the Minister of Justice ( Attorney General ) and the judiciary the authority to examine accounts and article 10 grants the Bank of Sudan ( the central bank ) the right of inspection , of issuing orders for the purposes of inspection and of control . The Act also grants the Bank the power to freeze moneys and financial assets deposited with banks and to dry up their sources , provided that the matter relates to Sudanese banks . The Terrorism ( Combating ) Act , moreover , requires the competent court to confiscate all real estate and other property , equipment , arms , means of conveyance or other things proved to have been used in committing or attempting to commit , or in facilitating or assisting in the commission of , terrorist offences or in harbouring those who plot , perpetrate , instigate or encourage such offences or have been charged with so doing , whether by word , deed , publication , failure to act or consent to the perpetration thereof , with the knowledge of the owner of the property , whether he made use thereof personally or through any of his subordinates or persons working with him . The court also has the right to order the seizure of any real or other property , assets , equipment or funds owned by a suspect whose involvement in a terrorist act has been substantiated and to deprive him of any benefit or the utilization of any other resources , funds or property , whether in the Sudan or abroad ( article 18 of the Act ) ; As examples of steps taken , the central bank undertook an investigation of charges that Osama Bin Laden was a shareholder in Al-Shamal Islamic Bank , though nothing was found to substantiate those accusations ( see annex V ) . Moreover , the accounts of all companies and commercial firms suspected of involvement in one way or another in terrorist organizations and those of suspected individuals were frozen , and a review was conducted of all the registers of shareholders in Sudanese banks so as to ensure that there were no shares or financial or commercial activity of any suspected individuals or organizations . Measures taken to prevent terrorist activities The Government has taken a number of measures for the prevention of terrorist activities in the country , such as the adoption , in August 1995 , of a decision requiring any alien coming to the country to obtain an entry visa in advance , so as to make it possible to ascertain the identity of visitors and protect the country against the entry of any terrorist elements . The decision provided exceptions for certain nationalities under bilateral agreements . However , the Government followed that decision with a subsequent one in 1998 , requiring nationals of all countries to obtain entry visas to the Sudan , including nationals of those countries for which obtaining entry visas had not previously been required . In addition , amendments to the Passport and Migration Act of 1993 included the following : The Minister of the Interior has the right to deport any foreign person from the Sudan , the Minister 's decision being final and not subject to appeal before the courts of law ; b. Under article 32 of the same law , the legislator provides penalties for illegal entry into the Sudan and for facilitating such entry or providing accommodation or shelter to persons who have thus entered ; c. Under article 33 , authority is granted to the police to arrest persons who enter the Sudan without permission and to keep them under detention until they have been brought to trial . In the wake of the events of 11 September 2001 , the Ministry of the Interior issued standing order No. 33 of 2001 calling for new controls and procedures for the entry of aliens and immigration security procedures at land and sea entry points , including airports and seaports . These procedures were aimed primarily at barring the entry into the country of any person suspected of having any connection with terrorist acts and preventing such persons from obtaining entry visas . The decision was also aimed at control of the entry or exit of any persons reportedly having a connection with the events of 11 September 2001 , with a view to their apprehension in the event that they are found . Controls were also tightened in connection with aliens staying in hotels , inns and private homes , the registration of whom is required by law ; moreover , employment agents for domestic help are required to report any foreign residents to the Aliens Section of the Ministry of the Interior . Security measures have also been taken to prevent foreign diplomats and their families and foreign interests and investments from being exposed to any hostile acts . The Government has earnestly complied with requests directed to it by foreign Governments , including the Government of the United States of America , to provide them with any information it might have on suspected persons . The competent departments of the central bank have confirmed that the Sudanese banking system does not maintain any accounts or balances belonging to any entities placed on the terrorist lists , and this also applies to commercial banks , based on their responses to the central bank . The Bank of Sudan ( central bank ) declares its full readiness to collaborate and cooperate in the investigation of any account or balance , provided that it is furnished with the name of the holder , by virtue of the authority to undertake such tasks granted to the Bank by law . The measures taken by the authorities include , in particular , the following : A review of all records of aliens present in the country to ensure that they do not belong to any terrorist organizations or take part in any questionable activities , the examination being repeated periodically ; The creation of specialized counter-terrorist units and their preparation and training ; Enhancement and retraining of monitoring and control means and instruments at the country 's ports and other points of entry . Legislation in force in the country to prevent terrorist activities Enlistment for the purpose of carrying out terrorist acts : Terrorism ( Combating ) Act , 2000 ( articles 6-12 , 19 ) ; The Penal Code of 1991 ( article 65 ) . Supplying of arms to terrorists : Terrorism ( Combating ) Act , 2000 ; The National Security Act of 1999 , as amended in 2001 ; The 1986 Arms , Ammunition and Explosives Act ; The 1986 Customs Act ; The 1994 Narcotic Drugs and Psychotropic Substances Act . Measures against the above : ( i ) The State has undertaken and is carrying out campaigns to collect private weapons in the Western Sudan and has concluded agreements and memoranda of understanding with a number of neighbouring States in line with its objective of controlling exit/entry points with a view to preventing arms from being surreptitiously brought into the country via illegal channels . It has also issued a regulation on the possession of arms which permits such possession solely by permit and abolishes the right of ownership of more than one firearm per person . It should be pointed out that the Arms , Ammunition and Explosives Act prohibits the entry of arms , ammunition and explosives into the country without permission ; moreover , the entry into the Sudan of some weapons , such as missiles , portable detonators , etc. , is prohibited , and the Minister of the Interior has the power to add items . The act also regulates the registration of arms and prohibits trafficking in them or their manufacture outside of the State facilities . It defines how they are to be exported and imported and how arms in transit are to be dealt with , in addition to regulating explosives , their storage and their use and determining the penalties for violations of the Act ; ( ii ) Terrorist events , which have been on the increase throughout the world and which reached their acme in the United States of America on 11 September 2001 , have forced the Sudan to place on its list of priorities the question of bilateral cooperation with neighbouring countries with a view to the elimination of terrorism and the adoption of safety procedures for preventing the perpetration or planning of such events . An example of this is the counter-terrorist cooperation agreement signed between the Sudanese state of Kassala and the Gash-Barka zone of Eritrea in November 2001 ; ( iii ) In September 2001 the Intergovernmental Authority on Development ( IGAD ) , which includes Djibouti , Eritrea , Ethiopia , Kenya , Somalia , the Sudan and Uganda , met in the Ethiopian capital Addis Ababa and drafted a protocol on the establishment of a conflict early warning and response mechanism with a view to conflict prevention and resolution . The aim of the protocol is to establish , and to eliminate all kinds of threats to , peace , security and stability in the States members of the group . It is expected that the protocol will be adopted by the IGAD summit planned for January 2002. Steps taken to prevent terrorist acts and early warning mechanisms to allow exchange of relevant information with other States The State is committed to exchanging information with other States within the framework of the international and regional instruments to which it is a party , treaties on judicial assistance , treaties on the extradition of criminals and United Nations resolutions , in addition to numerous conventions and memoranda of understanding concluded by the Sudan with neighbouring States for that purpose . Mention might be made , for example , of the cooperation in the field of security that has taken place over the past two years with the United States of America as well as with other States ; The customs authorities are stepping up the control and inspection of goods entering the Sudan , having packages and mail checked by the customs laboratory and performing chemical and biological testing whenever doubt exists . The passport and immigration authorities and the Ministry of the Interior are now also taking a number of measures , including the designing of new passports and identity documents that are difficult to falsify ; the preparation of a civil registry of all persons resident in the country , including both nationals and aliens ; the promulgation of a related law ; the bolstering of cooperation between the Interpol office in Khartoum and its other offices throughout the world ; and the strengthening of controls relating to aliens staying in inns and hotels . Within the Ministry of the Interior there is a committee on aliens , made up of representatives of the various organs of the State , which looks into the status of aliens and questions relating to their residence and visas . C. Procedures and legislation to prevent the Sudan from being a safe haven for terrorists National legislation and international and regional instruments ratified or acceded to by the Sudan prevent the country from being a safe haven for terrorists . Specific mention of this question is found in the following national acts : The Terrorism ( Combating ) Act , which provides for its compulsory application to anyone who undertakes , instigates , attempts or facilitatesthe commission of a terrorist offence and provides penalties therefor , including the seizure of property and the death penalty . It also permits the expulsion and deportation of persons who commit such offences and their extradition to injured States . In addition , the Customs Act , the Sudanese Regulation of Asylum Act ( Asylum ( Control ) Act ) , the Arms , Ammunition and Explosives Act and the treaties on the extradition of criminals signed with certain States all regulate the movement of aliens within the country and the punishment of aliens who break the law , particularly with respect to terrorist offences . The harsh penalties imposed for terrorist offences constitute a suitable deterrent . The Passport and Migration Act of 1993 grants the Minister of the Interior the power to expel from the country any undesirable alien ; The measures taken have included the reinstatement of the requirement to obtain visas in order to enter the country , residence procedures , checking at exit/entry points and permission to acquire arms and ammunition only in accordance with the law and subject to strict controls ; The Sudan has in fact cooperated with a number of injured States in the extradition of persons suspected of having committed terrorist offences . It complied with a request by the Government of Ethiopia for the return of Ethiopians suspected of having committed the terrorist offence of hijacking an Ethiopian aircraft and forcing it to fly to Khartoum in 1995 , and in 1997 it turned over to the French Government the person known as “ Carlos ” , who was suspected of having committed terrorist offences , despite the absence of any convention on the mutual extradition of criminals between the two States . In 2001 the Sudan arrested Ethiopian terrorists who had hijacked an Ethiopian aircraft and diverted it to the Sudan : they were indicted and ordered to stand trial in the Sudan . The Sudan also tried the person named Al-Khalifi , an alien who committed a terrorist offence that involved the killing of a number persons praying in a Khartoum mosque . He was condemned to death and the sentence was executed ; International conventions on the elimination of international terrorism , all of which have been acceded to or ratified by the Sudan , contain exceptions for offences having a political character . However , the bilateral conventions on the extradition of criminals concluded by the Sudan with other States , such as the 1964 Treaty on the Extradition of Criminals concluded with Ethiopia , make those offences non-political , which means that the exception regarding them is abrogated . Consequently , the bilateral and regional legal instruments to which the Sudan is a party have strengthened the Sudan 's international commitment under the international conventions on the extradition , prosecution , and trial of terrorists . Legislation or procedures to prevent terrorists from acting from within the Sudan against other States The Sudan is a pioneer State in the fight against terrorism through legislation , having acceded to 11 of the 12 international conventions against international terrorism ( see annexed list ) . It is now in the process of completing the formalities for accession to the International Convention for the Suppression of the Financing of Terrorism , which has been signed , and for accession to other regional instruments ( the African Convention on the Prevention and Combating of Terrorism and the Convention of the Organization of the Islamic Conference on Combating International Terrorism ) . Under the Sudanese judicial system , the conventions acceded to have become enforceable as part of the country 's domestic law . Moreover , national acts , such as the Terrorism ( Combating ) Act , the National Security Act , the Penal Code , the Arms , Ammunition and Explosives Act , the Customs Act , the Regulation of Asylum Act , the Extradition Act and bilateral agreements on the extradition of criminals , prohibit and provide penalties for the organization , financing or commission of terrorist acts or participation in such acts in any manner whatsoever . The Terrorism ( Combating ) Act , moreover , specifically and categorically prohibits engaging in terrorism within Sudanese territory or directing , instigating , attempting , participating in or facilitating , by word , deed or publication , in any manner whatsoever , the direction of an organized network used for committing any terrorist offence or offences in such a way that its operation poses a threat to persons , property or the public tranquillity , irrespective of whether such network operates within or outside the Sudan . The law provides severe punishment for such terrorist offences , which may involve death by crucifixion , simple death , cross amputation ( amputation of the right hand and left foot ) , life imprisonment or ordinary imprisonment , for they are considered grave offences . The Sudan does in fact engage in cooperation with a number of States in the common fight against terrorism , including the exchange of information and even the taking of steps for the extradition of suspected terrorists ( such as the extradition of Carlos to France and the expulsion of Osama Bin Laden from the country ) , as well as the adoption of stricter procedures for the entry of aliens and their residence in the country . In addition , periodic reviews are performed to ensure that the country is rid of any activity or presence of any of the organizations of known involvement in international terrorism that are listed by the Security Council . The Terrorism ( Combating ) Act also provides that it is applicable to any person suspected of committing , attempting to commit or inciting a terrorist offence either within or outside the Sudan . It also applies to any person who commits , attempts to commit or abets the commission of a terrorist offenceagainst any alien in the Sudan or legally resident there and to any person suspected of committing , attempting to commit or inciting a terrorist offence , provided that the terrorist act is punishable under both Sudanese law and the law of the State in which it was committed and that State agrees to the application of the Terrorism ( Combating ) Act in the Sudan . The Act further makes it compulsory to deport any alien convicted of committing , attempting to commit , inciting or providing financing or technical assistance for a terrorist offence , who must be expelled from the country or extradited in accordance with the law to any country injured by the terrorist offence . It also gives the authorities the power to expel any alien concerning whom there is evidence that he entered the country for the purpose of committing a terrorist offence , within a period not exceeding two weeks . Article 51 , paragraph c , of the Sudanese Penal Code provides that anyone who , in the Sudan , without the permission of the State , raises an army and equips it to attack a foreign State or carries out against a foreign State an act of aggression that is likely to expose the country to the risk of war is to be considered as having committed the offence of causing war against the State and may be punished by death , life imprisonment or a fixed term of imprisonment and possible confiscation of all his property . Also , the resolutions of the Security Council and the lists produced by its committees are always transmitted to the competent authorities for implementation , including its resolution 1373 ( 2001 ) concerning Afghanistan . Cooperation also takes place , through the Interpol office , with the corresponding offices in other States . E. Steps taken to establish terrorist acts as serious criminal offences and to ensure that the punishment reflects the seriousness of the offence The Sudan deals with terrorist offences in earnest , considering them grave offences . For this reason it has acceded to international and regional instruments . It has in fact taken part in their drafting and is at present participating earnestly in the development of a comprehensive treaty against terrorism in the United Nations . As a culmination of that interest , and especially in view of the fact that during the latter half of the 1990s the country suffered considerably from a series of terrorist offences in most of which a foreign hand was visible , the Terrorism ( Combating ) Act , 2000 , was promulgated , considering terrorist offences as grave offences affecting the interests and the social and national security of the Sudan . The Act defined terrorism as meaning any act of violence or threat of violence , irrespective of its motive or objectives , carried out in execution of an individual or collective criminal scheme and aimed at instilling terror in people or the fear that they will be harmed ; jeopardizing their lives , freedom or security ; causing harm to the environment ; harming , occupying or seizing any public or private property or facility ; or endangering any national or strategic resource . The penalties are graduated under national law according to the seriousness and consequences of the act . The Penal Code , for example , makes the creation or direction of terrorist criminal organizations , whether operating in the Sudan or outside , punishable by imprisonment for up to five years or a fine or both . If , however , the offence plotted by the organization is a grave offence , such as war or looting , a crime punishable by death , or terrorism involving a threat to the general public or the public authority , the penalty of imprisonment becomes compulsory , though it must not exceed ten years , and the imposition of a fine is also permissible . This , of course , applies to plotting , but if the offence has been committed , the punishment , depending on penalty provided by law , may be as severe as death . The law also provides that a person who commits the offence of terrorism , which here means threatening harm in order to cause a person to do what he is not required to do by law or making a movement or exhibiting readiness to act , intending thereby to use unlawful force , shall be punished by imprisonment for a term not exceeding six months or a fine or both . It should be mentioned that steps are currently being taken by the Ministry of Justice to review those penalties in order to make them more severe in the Penal Code . Under the Terrorism ( Combating ) Act , a terrorist offence against the State , the security of its society , citizens or property is punishable by death or life imprisonment . The same applies to anyone who plots , instigates , attempts , facilitates or participates in the direction of an organized network planning to commit terrorist offences , whether the network operates in the Sudan or abroad . The penalty for the seizure of aircraft may be as high as 14 years or a fine or both , and if the act results in damage to or endangers the safety of the aircraft and those aboard it , the penalty may be life imprisonment or death . The Act also provides that any act causing physical damage to the environment or jeopardizing the lives of persons shall be deemed a terrorist act and shall be punishable , upon a verdict of guilty , by imprisonment for a term not exceeding 20 years and a fine . The following are some of the punishments that have actually been carried out : The case of Mohamed Abdul Rahman Al-Khalifi , a Libyan national who attacked persons praying in a mosque in the city of Omdurman on 24 February 1994 , killing 19 of them and wounding more than 20. He was sentenced to death and the sentence was executed ; The Kambo Ashara incident in Wad Madani ( 1 January 1997 ) , in which members of the group known as “ Al-Takfir wal-Hijra ” attacked the inhabitants of Kambo Ashara with firearms . The security authorities opposed them , killing eight of the assailants , and the rest were brought to trial and sentenced to imprisonment for various terms ; The Jarafa incident , in which the Sudanese national known as Abbas Al-Sharif Al-Baqir , a member of the extremist group known as “ Al-Takfir wal-Hijra ” , attacked persons praying in the Jarafa Mosque on 8 December 2000. The attack resulted in the death of 24 persons at prayer . He was countered by the police and killed in an exchange of fire with them . Trial of aliens : the past two years witnessed a number of trials of aliens who had entered the country illegally or violated national laws . The related sentences included expulsion from the country . Procedures and mechanisms in place to assist other States ( with examples ) The policy of the Government of the Sudan has been characterized by cooperation with other States in the field of counter-terrorism . This became apparent in Security Council resolution 1372 ( 2001 ) of 28 September 2001 , concerning the Sudan , which acknowledged the steps taken by the Government of the Sudan to comply with the provisions of Security Council resolutions 1044 ( 1996 ) , 1054 ( 1996 ) and 1070 ( 1996 ) and decided the immediate termination of the measures referred to in paragraphs 3 and 4 of the Council 's resolution 1054 ( 1996 ) and paragraph 3 of its resolution 1070 ( 1996 ) , relating to the Sudan . The Sudan 's policy regarding cooperation with other countries is also manifest in its accession to regional and bilateral legal cooperation treaties . Indeed , it is one of the States parties to the Riyadh Arab Convention on Technical , Legal and Judicial Cooperation and has concluded a Treaty on Judicial and Legal Cooperation and Extradition of Criminals with the Syrian Arab Republic and individual treaties on the extradition of criminals with Kenya , Uganda , Ethiopia and the Central African Republic . The Sudan is a party to the Arab Convention for the Suppression of Terrorism , which provides for cooperation in that area among the Arab States , and has concluded with neighbouring countries cooperation agreements that contain provisions on cooperation in the field of counter-terrorism . That cooperation is also provided for in the national legislation referred to above . As can be seen from the foregoing paragraphs , the Government of the Sudan has adopted measures to assist other States in the field of counter-terrorism , in connection , for example , with the extradition of persons suspected of involvement in terrorist offences to both Ethiopia and France , in addition to cooperating with many States in the exchange of information among competent bodies . Border controls and checking of identity papers As mentioned , the measures adopted include the imposing of conditions on the obtainment of an entry visa to the Sudan , pursuant to Ministry of the Interior decision 185 of 1998 , and tight control of entry and exit at the country 's entry/exit points . In addition , in the wake of the events of 11 September 2001 , the Ministry of the Interior issued standing order No. 33 of 2001 , which called for new controls and procedures for the entry of aliens and migration security procedures at airports , seaports and land exit/entry points . The basic purpose of those measures is to prohibit the entry of any person suspected of having connections with terrorist activities . The decision was also aimed at monitoring and at making sure that no persons listed as connected with the events of 11 September 2001 enter or leave , so that they might be apprehended if found . It must be pointed out that the Sudan shares long borders with nine countries and a seacoast extending along the Red Sea ; consequently , the task of fully controlling those borders is beset with practical difficulties and requires international technical cooperation and close cooperation between neighbouring States . With regard to identity papers , procedures are actually under way for the production of difficult-to-counterfeit documents . Steps taken to intensify and accelerate the exchange of information on movements of terrorist persons or networks , forged or falsified travel documents , traffic in arms or sensitive materials , the use of communications technologies and the possession of weapons of mass destruction The Government of the Sudan cooperates with a number of States in the area of information exchange and is developing national information networks to facilitate the flow of information and consequently the exchange of information with other States ; Steps taken in respect of cooperation on administrative and judicial matters The Government of the Sudan cooperates with other States under agreements on judicial and legal cooperation and within the framework of the Sudanese Extradition Act and the relevant bilateral agreements . There are many examples , as shown in the course of this report , and close cooperation in this area exists with a number of States , within the framework of which information is exchanged among competent bodies ; C. Bilateral and multilateral cooperation for the prevention of terrorist acts and expulsion procedures actually carried out The Government of the Sudan cooperates in that area and has announced at the highest levels ( that of the President of the Republic ) its strong desire for international cooperation in the area of counter-terrorism . Cooperation exists with many countries , such as the United States of America , European and Asian countries and neighbouring States . Moreover , the Government of the Sudan has expelled persons or extradited them to other States , as in the case of the expulsion , in 1996 , of Osama Bin Laden , who had entered the Sudan as an investor in the early 1990s , and a group of his collaborators ; the case of the extradition to France , in 1997 , of the person known as “ Carlos ” , who had entered the Sudan with a forged identity document ; and the case of the extradition of an Ethiopian group that had hijacked an Ethiopian aircraft in 1995. In addition , the Sudan expelled some 400 aliens resident in the Sudan following the attempted assassination of the Egyptian President in Addis Ababa in 1995. Signing of and accession to regional and international conventions The Sudan is one of the more advanced States with regard to the signing of or accession to the relevant international and regional instruments . It has become a party to 11 international conventions and is in the process of completing the formalities for the ratification of the twelfth , namely the 1999 International Convention for the Suppression of the Financing of Terrorism , which has been signed by the Sudan . It is also completing the formalities for accession to the African Convention on the Prevention and Combating of Terrorism and the Convention of the Organization of the Islamic Conference on Combating International Terrorism . Upon completing those formalities , the Sudan will be a party to all the international and regional instruments on combating international terrorism . The fact that the Sudan has become a party to all international conventions and protocols aimed at the elimination of international terrorism , concerning which the Secretary-General of the United Nations produces a yearly report that is examined by the Sixth Committee of the United Nations General Assembly , prompted the Assembly to include a paragraph in its report on measures to eliminate international terrorism , adopted in 2000 at its Millennium Assembly , the text of which we would like to cite here : Notes with appreciation and satisfaction that , during the fifty-fourth session of the General Assembly and the Millennium Assembly , a number of States became parties to the relevant conventions and protocols thereby realizing the objective of wider acceptance and implementation of those conventions ; The Sudan is thus in the forefront of the States Members of the United Nations that have complied with the appeals contained in the resolutions and declarations issued by the United Nations General Assembly and in Security Council resolution 1269 ( 1999 ) , which call upon and encourage States to become parties to all the international conventions on combating terrorism and to implement and apply them . E. Any relevant information on the implementation of conventions and protocols Upon the Sudan 's becoming a party to the international and regional instruments , those instruments became part of its domestic law applied by judicial organs . The instruments were forwarded to the official gazette for publication and communicated to the country 's judiciary in order to be implemented . Legislation , procedures and mechanisms in place for ensuring that asylum seekers have not been involved in terrorist activity before being granted refugee status , with examples The Sudan is a party to the 1951 Convention on the Status of Refugees and the related 1967 Protocol and is bound by their provisions . The 1974 Regulation of Asylum Act governs all matters relating to refugees : it makes it incumbent on the competent authority in the country to observe any convention or treaty governing such status to which the Sudan is a party and stipulates that , in the application of the Act , priority is to be accorded to such conventions or treaties ( see annex VII ) . Under the Act , refugees are subject to the general laws of the country . They are not permitted to engage in any political activity during their stay in the Sudan or to leave the place of residence assigned to them except subject to specific rules . Mention should be made of the Sudan 's reservation regarding article 26 of the 1951 Convention , which is intended to enable it to abide by its obligation under article 3 of the 1969 Organization of African Unity ( OAU ) Convention Governing the Specific Aspects of Refugee Problems in Africa , which provides that refugees must abstain from hostile activities against OAU member States . A refugee may also be deported for having committed a serious non-political crime outside the Sudan before being granted permission to enter as a refugee ( such as a terrorist offence , inasmuch as such offences are not considered political offences under Sudanese law , even if committed for political reasons ) . In such a case he may be extradited in accordance with the Sudanese Extradition Act of 1957 ( article 11 ( b ) ) . He may also be deported if he commits an act contrary to the purposes and principles of the United Nations or the Organization of African Unity ( article 11 ( d ) ) ; if he commits a serious non-political crime outside the Sudan after being granted asylum ( article 11 ( e ) ) ; or if his presence in the Sudan constitutes a danger to internal or external security ( article 11 ( f ) ) . The procedures followed include the examination of applicants for refugee status at points of entry by the office of the commissioner for refugees and the ascertainment that they meet the conditions for that status in accordance with the Convention on the Status of Refugees and the relevant international law and domestic law . Procedures in place to prevent the abuse of refugee status by terrorists The law prohibits refugees from engaging in political activities and from plotting , directing , undertaking or participating in terrorist acts against a foreign State . Refugees are restricted and required for the most part to remain in a single place such as a refugee camp , and their movements are controlled and monitored to ensure their compliance with the law . Moreover , the Terrorism ( Combating ) Act and the Regulation of Asylum Act prohibit the invocation of political motives to prevent the extradition of suspected terrorists , inasmuch as the Act does not take political motives into account in terrorist offences . H. Additional information or observations on the implementation of the resolution As we have mentioned , the Sudan has continued to be a State that is eager to cooperate in the fight against international terrorism in all its forms , a position that has been concretely reflected in its accession to international and regional instruments , not to mention its share in the drafting of those instruments through its participation in the forums that prepared them . It has also been reflected in the cooperation the Sudan has evinced for many years with injured States . Furthermore , the item “ international terrorism ” , which was one of the items of the Sudanese-European dialogue during its first year ( 1999 ) , was dropped in the second year of the dialogue as a result of satisfaction with the Sudan 's earnest compliance and its pioneering State policies on combating terrorism . The Government reaffirmed its anti-terrorist policies in a statement by the Minister for Foreign Affairs before the National Council ( Parliament ) on 25 April 2001 ( annexed hereto ) , in which he reaffirmed the Sudan 's absolute condemnation of all forms of terrorism and its constructive cooperation with the international community in countering it . He emphasized that such cooperation included the extradition of suspects , judicial cooperation and the exchange of information and that the Government of the Sudan would not provide any safe haven or permit any training or financing of or support for any individuals or groups involved in terrorist activities . It was those convictions that prompted the Sudan 's attitude of cooperation with the international community and condemnation of the recent terrorist events . The Sudan took the initiative to invite the African Dispute Settlement Mechanism to a meeting in New York during the fifty-sixth session of the General Assembly in order to discuss African cooperation in the field of terrorism , which resulted in the issuance of a statement by the Mechanism on that subject that was considered an official document of the General Assembly . The Sudan also calls for collective Arab efforts against terrorism in all its forms as well as efforts on the part of the Organization of the Islamic Conference and other regional organizations in which it participates , such as the Intergovernmental Authority on Development ( IGAD ) and the Sahelo-Saharan group . The Government of the Sudan is determined to conduct a general review of the relevant legislation with a view to revising it and to coping with the rapid changes taking place in the nature of international terrorism . The Sudan feels that the adoption by the international community of a comprehensive definition of terrorism will facilitate the identification of terrorist activity and provide a legal tool for its elimination . Areas in which the country requires technical assistance The Sudan needs material and technical assistance in order to develop its capacities for the fight against terrorism and for international cooperation and information exchange . Such help is needed in the following areas : Completion of the building of national and specialized information networks ; Support for the implementation of the civil registration project being carried out by the Ministry of the Interior ; Support in connection with the review of national legislation and the dissemination of international and regional instruments on the fight against terrorism ; Assistance in developing chemical and biological materials and weapons search technologies ; Development and strengthening of border control and early warning systems ; Strengthening and development of customs workshops and laboratories from the technical standpoint ; Training in the various areas of the fight against terrorism ; Support for the counter-terrorism unit of the Ministry of the Interior ( in the process of being established ) ; Strengthening and development of the technology of the central bank and the financial information network ; Support for the office for national liaison with the Counter-Terrorism Committee established pursuant to Security Council resolution 1373 ( 2001 ) . Appendices Letter from the President of the Republic to the President of the United States of America . Letter from the Minister for Foreign Affairs of the Republic of the Sudan to the Secretary of State of the United States of America . Statement delivered by the Minister for Foreign Affairs of the Sudan before the Parliament on the Sudan 's policy regarding the fight against terrorism , with an annexed list of international conventions on that subject that have been signed and ratified by the Sudan . Banking Regulation Act ( Amendment ) , 1993. Eight documents on Al-Shamal Islamic Bank . Extradition Act of 1957 ( in Arabic and English ) . Regulation of Asylum Act of 1974 ( in Arabic and English ) . Provisional decree : The Terrorism ( Combating ) Act , 2000 ( in Arabic and English ) . Appendix I [ Original : Arabic/English ] Letter from the President of the Republic to the President of the United States of America Appendix II [ Original : Arabic/English ] Letter from the Minister for Foreign Affairs of the Republic of the Sudan to the Secretary of State of the United States of America Appendix III [ Original : Arabic/English ] Statement delivered by the Minister for Foreign Affairs of the Sudan before the Parliament on the Sudan 's policy regarding the fight against terrorism , with an annexed list of international conventions on that subject that have been signed and ratified by the Sudan Appendix IV [ Original : Arabic ] Banking Regulation Act ( Amendment ) , 1993 Appendix V [ Original : Arabic/English ] Eight documents on Al-Shamal Islamic Bank Appendix VI [ Original : Arabic and English ] Extradition Act of 1957 ( in Arabic and English ) Appendix VII [ Original : Arabic and English ] Regulation of Asylum Act of 1974 ( in Arabic and English ) Appendix VIII [ Original : Arabic and English ] Provisional decree : The Terrorism ( Combating ) Act , 2000 ( in Arabic and English ) appendices I-VIII offset : pp 2,4,6-9,11-12,14-27,29-34,36-37,39-47 